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

Scala 从数据帧中选择和处理数据的最有效方法,scala,hadoop,apache-spark,dataframe,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 TAB

我想使用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,并将其与表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");
因为我面临许多困难,所以没有取得多大进展:

  • 如何有效地处理SELECT和处理数据?将所有内容保存在单独的数据帧中
  • 如何插入带有多个源属性的WHERE/GROUPBY子句
  • 除了Spark SQL,还有其他/更好的方法吗

  • 处理的几个步骤是-

  • 首先使用原始数据创建数据帧

  • 然后将其另存为临时表

  • 您可以使用filter()或“sparksql中的where条件”并获取 合成数据帧

  • 然后,当您使用时,您可以将jons与datframes一起使用。你可以 可以将dafaframes视为表的表示形式


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

    Spark SQL,特别是Spark 2,非常擅长以高效的方式执行优化和昂贵的操作。您是否尝试过将数据源注册为表并在Spark SQL上运行原始查询而不做任何修改?将Spark DataFrame转换为配置单元表,然后使用Spark SQL查询该表?