我的主数据框如下所示:
data = spark.createDataFrame([
("name1", "type1", 2),
("name1", "type2", 1),
("name1", "type3", 4),
("name1", "type4", 5),
("name2", "type1", 6),
("name2", "type2", 7),
("name2", "type3", 8) \
],["name", "type", "cnt"])
data.printSchema()
什么是:
|name |type|cnt|
|------|-----------
|name1 |type1| 2|
|name1 |type2| 1|
|name1 |type3| 4|
|name1 |type4| 5|
|name2 |type1| 7|
|name2 |type2| 8|
| .... | ... | |
然后还有两个我想用来过滤主 DF 的数据帧:
df_name = spark.createDataFrame([
("name1"),
],["name"])
data.printSchema()
df_type = spark.createDataFrame([
("type1"),
("type3")
],["type"])
data.printSchema()
我想选择 df1 中具有 name IN df_name 和 type in df_type 的所有行。 类似于 SQL 中 in 子句的作用
SELECT * from df1
WHERE name in ('name1')
AND type IN ('type1', 'type3');
什么应该导致 2 行:
|name |type|cnt|
|------|-----------
|name1 |type1| 2|
|name1 |type3| 4|
如何使用 spark dataFrames 以高效的方式完成,性能是否比在 Hive 中更好?
谢谢
请您参考如下方法:
您可以将 data 与 type 和 name 数据框进行内部连接:
data.join(df_type, ["type"], "inner").join(df_name, ["name"], "inner").show()
+-----+-----+---+
| name| type|cnt|
+-----+-----+---+
|name1|type3| 4|
|name1|type1| 2|
+-----+-----+---+
