我有一个问题 - 如何在PySpark上使用sc.textFile加载本地文件(不在HDFS上,而不在S3上).我读了这篇文章,然后复制sales.csv
到主节点的本地(不是HDFS),最后执行了以下
sc.textFile("file:///sales.csv").count()
但它返回以下错误,说 file:/click_data_sample.csv does not exist
Py4JJavaError:调用z:org.apache.spark.api.python.PythonRDD.collectAndServe时发生错误.:org.apache.spark.SparkException:作业因阶段失败而中止:阶段3.0中的任务0失败4次,最近失败:阶段3.0中丢失任务0.3(TID 10,ip-17x-xx-xx-xxx.ap -northeast-1.compute.internal):java.io.FileNotFoundException:文件文件:/sales.csv不存在
我试过了file://sales.csv
,file:/sales.csv
但都失败了.
你给我一些如何加载本地文件的建议是非常有帮助的.
我的环境是亚马逊emr-4.2.0 + Spark 1.5.2.
所有端口都已打开
我确认了HDFS或S3 工作的加载文件.
这是从HDFS加载的代码 - 下载csv,提前复制到hdfs然后用sc.textFile加载("/ path/at/hdfs")
commands.getoutput('wget -q https://raw.githubusercontent.com/phatak-dev/blog/master/code/DataSourceExamples/src/main/resources/sales.csv') commands.getoutput('hadoop fs -copyFromLocal -f ./sales.csv /user/hadoop/') sc.textFile("/user/hadoop/sales.csv").count() # returns "15" which is number of the line of csv file
这是从S3加载的代码 - 提前将S3放入csv文件,然后使用"s3n://"标志加载sc.textFile("s3n:// path/at/hdfs").
sc.textFile("s3n://my-test-bucket/sales.csv").count() # also returns "15"
facha.. 10
文件读取发生在执行程序节点上.为了使代码正常工作,您应该在所有节点上分发文件.
如果Spark驱动程序在文件所在的同一台机器上运行,您可以尝试读取文件(例如使用f=open("file").read()
for python),然后调用sc.parallelize
将文件内容转换为RDD.
文件读取发生在执行程序节点上.为了使代码正常工作,您应该在所有节点上分发文件.
如果Spark驱动程序在文件所在的同一台机器上运行,您可以尝试读取文件(例如使用f=open("file").read()
for python),然后调用sc.parallelize
将文件内容转换为RDD.