我已经创建了两个来自Hive表(PC_ITM和ITEM_SELL)并且大小很大的数据帧,我通过注册表来经常在SQL查询中使用它们.但是因为它们很大,所以需要花费很多时间来获取查询结果.所以我把它们保存为镶木地板文件,然后读取它们并注册为临时表.但是我仍然没有得到良好的性能,所以我播放了那些数据帧,然后注册为如下表格.
PC_ITM_DF=sqlContext.parquetFile("path")
val PC_ITM_BC=sc.broadcast(PC_ITM_DF)
val PC_ITM_DF1=PC_ITM_BC
PC_ITM_DF1.registerAsTempTable("PC_ITM")
ITM_SELL_DF=sqlContext.parquetFile("path")
val ITM_SELL_BC=sc.broadcast(ITM_SELL_DF)
val ITM_SELL_DF1=ITM_SELL_BC.value
ITM_SELL_DF1.registerAsTempTable(ITM_SELL)
sqlContext.sql("JOIN Query").show
Run Code Online (Sandbox Code Playgroud)
但是我仍然无法实现性能,因为这些数据帧没有被广播.
任何人都可以判断这是否是正确的广播和使用方法?`
我有两个 rdd,我想为 rdd1 的每个项目对 RDD2 项目进行一些计算。所以,我在用户定义的函数中传递 RDD2,如下所示,但我收到类似rdd1 cannot be passed in another rdd. 如果我想在两个 rdd 上执行操作,我能知道如何实现吗?
例如:
RDD1.map(line =>function(line,RDD2))