0
我想使用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,还有其他更好的方法吗?在处理
Spark SQL,特别是Spark 2,在执行优化和高效执行昂贵操作方面非常出色。您是否尝试过仅将数据源注册为表,并在Spark SQL之上运行原始查询而无需修改? – stefanobaghino
将Spark DataFrame转换为Hive Table,然后用spark sql查询表格? –