从数据框中选择和处理数据的最有效方法
问题描述:
我想使用Scala从Spark中的数据框中加载和处理数据。 原始SQL语句如下所示:从数据框中选择和处理数据的最有效方法
INSERT INTO TABLE_1
(
key_attribute,
attribute_1,
attribute_2
)
SELECT
MIN(TABLE_2.key_attribute),
CURRENT_TIMESTAMP as attribute_1,
'Some_String' as attribute_2
FROM TABLE_2
LEFT OUTER JOIN TABLE_1
ON TABLE_2.key_attribute = TABLE_1.key_attribute
WHERE
TABLE_1.key_attribute IS NULL
AND TABLE_2.key_attribute IS NOT NULL
GROUP BY
attribute_1,
attribute_2,
TABLE_2.key_attribute
什么我迄今所做的: 我SELECT语句创建一个数据帧,并与TABLE_2数据框中加入。
val table_1 = spark.sql("Select key_attribute, current_timestamp() as attribute_1, 'Some_String' as attribute_2").toDF();
table_2.join(table_1, Seq("key_attribute"), "left_outer");
并不是真正意义上的进步,因为我面临许多困难:
- 如何处理SELECT与高效处理数据?将所有内容保存在单独的DataFrame中?
- 如何插入WHERE/GROUP BY子句与来自多个来源的属性?
- 除了Spark SQL,还有其他更好的方法吗?在处理
答
几个步骤 -
首先创建数据帧与原始数据
然后将其保存为临时表。
您可以使用过滤器()或“WHERE条件在sparksql”,并获得 产生的数据帧
然后你用 - 你可以利用JONS与datframes。您可以将012fa想象为dafaframes作为表的表示。
关于效率,由于处理将并行进行,因此需要小心。如果您想要提高效率,请提及它。
Spark SQL,特别是Spark 2,在执行优化和高效执行昂贵操作方面非常出色。您是否尝试过仅将数据源注册为表,并在Spark SQL之上运行原始查询而无需修改? – stefanobaghino
将Spark DataFrame转换为Hive Table,然后用spark sql查询表格? –