我可以使用其他数据帧列来查询spark sql

时间:2016-05-17 04:50:03

标签: join apache-spark apache-spark-sql

我在Hive中有两张大桌子。 '表1'和'表2'。两个表都有一个共同的列'键。

我查询了表1'在期望的条件下创建了一个DataFrame' df1'。 现在,我想查询表2'并希望使用来自' df1'的列在where子句中。

以下是代码示例:

val df1 = hiveContext.sql("select * from table1 limit 100")

我可以做点什么吗

val df2 = hiveContext.sql("select * from table2 where key = df1.key")

**注意:我不想在加入两个表时进行单个查询

任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:2)

由于您已明确写明您不想加入表格,因此简短的回答是"不,您不能进行此类查询"。

我不确定你为什么不想加入,但如果你想进行查询,肯定需要它。如果你担心加入两个巨大的桌子,那就不行了。 Spark是为这种事情而建立的:)

答案 1 :(得分:0)

我找到的解决方案如下

让我先给出数据集大小。

Dataset1 - pretty small (10 GB)
Dataset2 - big (500 GB+)

数据帧连接有两种解决方案

解决方案1 ​​ 如果您使用的是Spark 1.6+,请按以下方式对两个数据帧进行重新分区    必须在其上进行连接的列。当我这样做时,加入完成了    在不到2分钟的时间内完成。

df.repartition(df("key"))

解决方案2 如果您不使用Spark 1.6+(即使使用1.6+),如果使用的话    数据很小,缓存它并在广播中使用它

df_small.cache
df_big.join(broadcast(df_small) , "key"))

这是在不到一分钟的时间内完成的。