我正在这样创建一个SparkSession
:
SparkSession
.builder().appName("foo").master("local")
.config("spark.default.parallelism", 2).getOrCreate()
当我运行时(通过单元测试,specs2)
((1 to 10) ++ (1 to 10)).toDS().distinct().count()
我有200个分区
19/12/02 10:29:34 INFO TaskSchedulerImpl: Adding task set 1.0 with 200 tasks
...
19/12/02 10:29:34 INFO TaskSetManager: Finished task 0.0 in stage 1.0 (TID 2) in 46 ms on localhost (executor driver) (1/200)
由于distinct
给出了ds.rdd.getNumPartitions
,而2
给出了ds.distinct().rdd.getNumPartitions
,是200
被破坏了。 ds.rdd.groupBy(identity).map(_._2.head)
和ds.rdd.distinct()
似乎可以正常工作。
这是Spark中的错误还是我错过了一些东西?
火花版本:2.4.0、2.4.4
答案 0 :(得分:0)
看完我自己的问题后,我看到是的,这一定是个错误。
创建https://issues.apache.org/jira/browse/SPARK-30101
暂时可以使用ds.rdd.distinct().toDS()
解决方法。