我发现了一段代码,极大地损害了以下程序的并行化(ML管道)。它的目的是"数字化"一列,例如转换一个列" int"值为Array(0,1,2,0,3)
的{{1}}。
导致问题的(可怕的)代码是
Array(0,1,1,0,1)
显然,实现这一目标的更好的代码是
dfBin = df
.filter(df("int") > 0)
.withColumn("int",org.apache.spark.sql.functions.lit(1)
.union(df.filter(df("int") === 0))
问题:为什么第一个片段会阻止Spark并行化,以及如何在未来更快地识别出这些有害的代码片段?