从数据框中选择和处理数据的最有效方法

时间:2017-05-31 08:33:04

标签: scala hadoop apache-spark dataframe

我想使用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语句创建了一个DataFrame,并将其与TABLE_2 DataFrame结合在一起。

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之外还有其他/更好的方法吗?

1 个答案:

答案 0 :(得分:0)

处理的几个步骤是 -

  1. 首先使用原始数据创建数据框

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

  3. 您可以使用filter()或“sparksql中的where where”并获取 结果数据框

  4. 然后就像你使用的那样 - 你可以使用带有数据帧的jons。您可以 将dafaframes视为表格的表示。

  5. 关于效率,由于处理将并行进行,因此需要注意。如果您想了解更多有关效率的信息,请提及。