Apache spark 为什么sc.wholeTextFile().collect()速度慢

Apache spark 为什么sc.wholeTextFile().collect()速度慢,apache-spark,Apache Spark,我正在使用Spark2.1本地模式(本地[4]),并尝试调用sc.wholeTextFiles以RDD形式读取news20数据集: val rdd=sc.wholeTextFiles(“~/20news-18828/*”,4) val result=rdd.collect() 从这里下载数据集:解压后,在20news-18828下将有20个类别文件夹。对于每个子文件夹,大约有900个小文本文件,因此总共有18828个文本文件。 目前数据在我的本地机器上,可能将来我会从HDFS读取它们 我的问

我正在使用Spark2.1本地模式(本地[4]),并尝试调用
sc.wholeTextFiles
以RDD形式读取news20数据集:

val rdd=sc.wholeTextFiles(“~/20news-18828/*”,4)
val result=rdd.collect()
从这里下载数据集:解压后,在
20news-18828
下将有20个类别文件夹。对于每个子文件夹,大约有900个小文本文件,因此总共有18828个文本文件。 目前数据在我的本地机器上,可能将来我会从HDFS读取它们

我的问题是调用上面的
rdd.collect()
非常慢,大约需要90秒。。。或者,如果我使用本地Java文件API将它们作为一个数组读取,然后
sc.parallelize然后collect
,它几乎会立即完成

想知道为什么使用
sc.wholeTextFiles
会这么慢吗?或者我做错了什么?我只是不熟悉Spark,任何帮助都将不胜感激


提前多谢

这比读取本地文件要慢,因为这样会产生不增加任何价值的开销

// read files into at least 4 partitions
// here you have the overhead of spinning up driver and executors and partitioning data
val rdd = sc.wholeTextFiles("~/20news-18828/*", 4)

// pull all of the data back from the executors and put it all on the driver
val result = rdd.collect()
为了获得spark并行的性能优势,您需要以某种方式并行处理数据

由于您刚刚开始使用Spark,我建议您从较新的DataFrameAPI开始,而不是从较旧的低级Spark上下文/RDD开始