【发布时间】:2016-12-20 19:36:44
【问题描述】:
我一直在尝试不同的方法来过滤类型化的数据集。事实证明,性能可能完全不同。
数据集是基于 1.6 GB 的数据行创建的,其中包含 33 列和 4226047 行。 DataSet 通过加载 csv 数据创建并映射到案例类。
val df = spark.read.csv(csvFile).as[FireIncident]
UnitId = 'B02' 上的过滤器应返回 47980 行。我测试了以下三种方法: 1) 使用类型化列(本地主机约 500 毫秒)
df.where($"UnitID" === "B02").count()
2)使用临时表和sql查询(~与选项1相同)
df.createOrReplaceTempView("FireIncidentsSF")
spark.sql("SELECT * FROM FireIncidentsSF WHERE UnitID='B02'").count()
3) 使用强类型类字段(14,987ms,即慢 30 倍)
df.filter(_.UnitID.orNull == "B02").count()
我用python API再次测试,同样的数据集,时间为17046ms,与scala API option 3的性能相当。
df.filter(df['UnitID'] == 'B02').count()
有人能解释一下 3) 和 python API 的执行方式与前两个选项的不同吗?
【问题讨论】:
标签: apache-spark apache-spark-sql spark-dataframe apache-spark-dataset