如何优化巨大的火花数据帧SQL查询来比较来自火花流RDD的值?

时间:2015-06-26 17:35:42

标签: apache-spark dataframe spark-streaming apache-spark-sql

我正在创建一个使用spark SQL(数据帧)和spark streaming的演示。我无论如何都不是火花专家,所以我需要一些帮助!

我从数据库中加载大约1百万个对象来激活Dataframe,我执行SQL查询以匹配某些字段以及来自spark streaming的实时数据。

例如,

event.currentTarget.getAttribute('data-action')

stream.xxx是一个java字符串,我从spark stream RDD中提取成一个字符串。

现在,问题在于,如果数据帧为100万行和多列,则上述SQL查询可能需要一些时间才能执行,即使DF持久存储在内存中也是如此。我有一个想法,我将Person表拆分为邮政编码区域(每个数据框包含来自1个区域的Person)并处理每个数据帧上的每个火花流RDD。这样可以缩短查询时间并加快速度。

我不知道如何进行分区。下面是一些示例代码。

SELECT *
FROM Person
WHERE Person.name='stream.name' AND Person.age='stream.age' AND ... etc

我假设每个工作节点都将处理foreachRDD方法,但事实并非如此。有什么方法可以指定每个工作人员并行运行每个foreachRDD吗?

编辑:TransactionProcessingFunction类本质上只是一个for循环,循环流数据并执行上面的查询并显示一些结果。

1 个答案:

答案 0 :(得分:0)

我将尝试获取死灵法师银牌,指导你to this page查看如何在流中加载SQL表。创建表对象后,您可以{rdd} repartition()或者让Spark Environmnet完成其工作。