我已经创建了两个来自Hive表(PC_ITM和ITEM_SELL)并且大小很大的数据帧,并且我经常在SQL查询中使用那些 通过注册为表。但由于那些大,因此我花了很多时间获取查询结果。因此,我将它们保存为parquet文件,然后将它们读取并注册为临时表。但仍然得不到良好性能,因此我已广播了这些数据帧,然后注册了它们如下表所示。如何访问Spark中的广播数据帧
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
但是我还是无法实现它与这些数据帧未被广播的时间相同的性能。
谁能告诉如果这是广播和使用它的正确方法?`
这不回答原来的问题,这就是如何广播数据帧。如果您不止一次加载它,即重复使用,坚持只会有所帮助。加入两个分布式数据集时无助于此。 –
@KirkBroadhurst他指出数据很大并且经常使用 –
@AlexNaspo稍微偏离原始问题:'RDD适合内存',因此这意味着我无法播放数据,直到我可以将其收集到驱动程序的主内存中?我通常使用自己的笔记本电脑作为大型集群上的驱动程序和主设备/从设备。那么这是我很快可能面临的限制吗? –