2017-05-31 103 views
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"); 

并不是真正意义上的进步,因为我面临许多困难:

  1. 如何处理SELECT与高效处理数据?将所有内容保存在单独的DataFrame中?
  2. 如何插入WHERE/GROUP BY子句与来自多个来源的属性?
  3. 除了Spark SQL,还有其他更好的方法吗?在处理
+0

Spark SQL,特别是Spark 2,在执行优化和高效执行昂贵操作方面非常出色。您是否尝试过仅将数据源注册为表,并在Spark SQL之上运行原始查询而无需修改? – stefanobaghino

+0

将Spark DataFrame转换为Hive Table,然后用spark sql查询表格? –

回答

0

几个步骤 -

  1. 首先创建数据帧与原始数据

  2. 然后将其保存为临时表。

  3. 您可以使用过滤器()或“WHERE条件在sparksql”,并获得 产生的数据帧

  4. 然后你用 - 你可以利用JONS与datframes。您可以将012fa想象为dafaframes作为表的表示。

关于效率,由于处理将并行进行,因此需要小心。如果您想要提高效率,请提及它。

相关问题