-3

我正在尝试使用当前使用 spark sql 的 scala 使用 spark 对数据集进行一些转换,但希望将代码转换为本机 scala 代码。我想知道是否使用过滤器或映射,执行一些操作,例如匹配列中的值并在转换为不同数据集后获取单个列。

SELECT * FROM TABLE WHERE COLUMN = ''

以前曾经在 spark sql 中写过类似的东西,有人可以告诉我另一种方法来使用数据集上的 map 或 filter 编写相同的内容,甚至在比较时哪个更快。

4

2 回答 2

0

您可以从 Apache Spark 网站阅读文档。这是https://spark.apache.org/docs/2.3.1/api/scala/index.html#package上的 API 文档的链接。这是一个小例子 -

val df = sc.parallelize(Seq((1,"ABC"), (2,"DEF"), (3,"GHI"))).toDF("col1","col2")
val df1 = df.filter("col1 > 1")
df1.show()
val df2 = df1.map(x => x.getInt(0) + 3)
df2.show()
于 2018-09-06T08:02:43.563 回答
0

如果我正确理解您的问题,您需要将 SQL 查询重写为 DataFrame API。您的查询从表中读取所有列TABLE并过滤COLUMN为空的行。您可以通过以下方式使用 DF 执行此操作:

spark.read.table("TABLE")
  .where($"COLUMN".eqNullSafe(""))
  .show(10)

性能将与您的 SQL 相同。使用dataFrame.explain(true)方法来了解 Spark 会做什么。

于 2018-09-06T09:13:02.773 回答