使用过滤器或贴图应用变换哪个比Scala spark更快

使用过滤器或贴图应用变换哪个比Scala spark更快,scala,apache-spark,Scala,Apache Spark,我正在尝试使用spark对数据集进行一些转换,spark使用scala当前使用spark sql,但希望将代码转换为本机scala代码。我想知道是使用filter还是map,执行一些操作,比如匹配列中的值,并在转换到不同的数据集后获得单个列 SELECT * FROM TABLE WHERE COLUMN = '' 以前在spark sql中写过类似的东西,有人能告诉我另一种在数据集上使用map或filter来写同样的东西的方法吗?哪种方法比它快得多。您可以从Apache spark网站上阅读

我正在尝试使用spark对数据集进行一些转换,spark使用scala当前使用spark sql,但希望将代码转换为本机scala代码。我想知道是使用filter还是map,执行一些操作,比如匹配列中的值,并在转换到不同的数据集后获得单个列

SELECT * FROM TABLE WHERE COLUMN = ''

以前在spark sql中写过类似的东西,有人能告诉我另一种在数据集上使用map或filter来写同样的东西的方法吗?哪种方法比它快得多。

您可以从Apache spark网站上阅读文档。这是指向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()

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

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

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

请提供您的输入示例和输出,以便我可以建议使用我现在拥有的
DateSetWithParkReadSqltable.createOrReplaceTempView(“表”)的用户
然后我让spark sql=
从表中选择*,其中COLUMN\u NAME='YES'
我想使用过滤器或映射做同样的事情。直接使用数据集,而不是使用spark sql。谢谢您的回答。您还可以告诉我如何使用map
df.map(row=>{})
执行同样的操作,我想知道哪些操作可能需要更少的时间。map不过滤行。映射用于从记录中导出一个值,并为每行输出一个值。对于筛选行,必须使用筛选转换。我在答案中添加了map示例。所以map对每一行执行一些操作并返回它。我们可以使用相同的逻辑跳过一些不满足条件的行,只返回那些满足条件的行并创建一个新的df吗val df2=df1.map(x=>if{x[column][value]>1返回x[column][value]否则跳过)df2.show()`。这是一个伪代码。我可以用map执行上述操作吗?不。map不能跳过记录。它的输入是一个记录并返回一个值。要从单个记录跳过或创建多个记录,您必须使用FlatMap。您能给我一个使用FlatMap的简单示例吗?再说一遍,过滤或FlatMap哪个更有效?