Spark allTextFiles shell和app之间的区别

时间:2016-04-21 06:33:42

标签: apache-spark

我已经复制粘贴了一行看起来像这样的

val files = sc.wholeTextFiles("file:///path/to/files/*.csv")

从运行它的Spark shell到应用程序,它不运行。相反,我得到的模式匹配0个文件,即使在shell中我可以看到所有文件而Spark会读取它们。

我错过了什么?这是文件权限问题吗?

我按以下方式运行应用程序:

spark-submit \
  --master yarn \
  --deploy-mode cluster \
  --files /usr/hdp/current/spark/conf/hive-site.xml \
  --num-executors 20 \
  --driver-memory 8G \
  --executor-memory 4G \
  --class com.myorg.pkg.MyApp \
  MyApp-assembly-0.1.jar

1 个答案:

答案 0 :(得分:2)

为了使其正常工作,您的所有执行程序都需要访问此文件。如果文件不在每个执行程序的本地文件系统上,那么您将遇到问题。

一种选择是将文件放在hdfs上,并将路径提供为hdfs:/path/to/file.csv。这样所有执行者都可以访问它。

另一种选择是在--files参数中传递文件。这会将文件发送给所有执行程序,以便他们都可以访问它。