Apache spark 加载本地文件(非HDFS)在Spark时失败
我有一个问题-如何在PySpark上用sc.textFile加载本地文件(不在HDFS上,不在S3上)。 我读取,然后将Apache spark 加载本地文件(非HDFS)在Spark时失败,apache-spark,pyspark,Apache Spark,Pyspark,我有一个问题-如何在PySpark上用sc.textFile加载本地文件(不在HDFS上,不在S3上)。 我读取,然后将sales.csv复制到主节点的本地(非HDFS),最后执行以下操作 sc.textFile("file:///sales.csv").count() 但它返回以下错误,即文件:/click\u data\u sample.csv不存在 Py4JJavaError:调用时出错 z:org.apache.spark.api.python.PythonRDD.collectAnd
sales.csv
复制到主节点的本地(非HDFS),最后执行以下操作
sc.textFile("file:///sales.csv").count()
但它返回以下错误,即文件:/click\u data\u sample.csv不存在
Py4JJavaError:调用时出错
z:org.apache.spark.api.python.PythonRDD.collectAndServe.:
org.apache.spark.sparkeexception:由于阶段失败,作业中止:
阶段3.0中的任务0失败4次,最近一次失败:丢失任务0.3
在第3.0阶段(TID 10、,
ip-17x-xx-xx-xxx.ap-northeast-1.compute.internal):
java.io.FileNotFoundException:文件:/sales.csv
不存在
我尝试了file://sales.csv
和文件:/sales.csv
但两者都失败
这是非常有帮助的,你给我好的建议如何加载本地文件
注1:
- 我的环境是亚马逊emr-4.2.0+Spark 1.5.2
- 所有端口都已打开
注2: 我已确认从HDFS或S3加载文件有效 以下是从HDFS加载的代码-下载csv,提前复制到HDFS,然后使用sc.textFile(“/path/at/HDFS”)加载 下面是从S3加载的代码-将csv文件提前放在S3,然后使用sc.textFile(“s3n://path/at/hdfs”)和“s3n://”标志加载
文件读取发生在executor节点上。为了使代码正常工作,您应该将文件分发到所有节点上
如果Spark驱动程序在文件所在的同一台机器上运行,您可以尝试读取该文件(例如,对于python,使用
f=open(“file”).read()
),然后调用sc.parallelize
,将文件内容转换为RDD。我遇到了类似的问题,facha是正确的,您尝试加载的数据必须可以在集群中访问(对于主服务器和执行器)
我相信在您的情况下,file:/命令仍在尝试从不存在的hadoop HDFS加载,您可以使用以下命令进行测试
hadoop fs-cat yourfile.csv
通过从hdfs加载文件并从hdfs读取,我解决了这个问题,代码如下:
var conf = new org.apache.hadoop.conf.Configuration();
var fs = org.apache.hadoop.fs.FileSystem.get(conf);
var filenamePath = new org.apache.hadoop.fs.Path("myfile.json");
if (fs.exists(filenamePath))
{
fs.delete(filenamePath, true);
}
var fin = fs.create(filenamePath);
fin.writeBytes(html);
fin.close();
val metOffice = sql.read.json("myfile.json")
如果以集群模式运行,则需要跨同一共享文件系统的所有节点复制文件。然后spark读取该文件,否则应该使用HDFS 我将txt文件复制到HDFS中,spark从HDFS中获取该文件 我在所有节点的共享文件系统上复制了txt文件,然后spark读取该文件
两人都为我工作facha,谢谢你的评论。我明白我的代码失败的原因了——文件必须是所有从节点(而不是集群的主节点)!嗨,andrew.butkus,谢谢你的参考代码,对我帮助很大。你需要以--master local的身份运行spark shell。然后您可以将文件读取为sc.textFile(“file:///sales.csv)。我有一个类似的错误。但是主python源文件也出现了这种错误。有什么想法吗?您是在交互模式(pyspark shell)下进行操作还是通过spark submit运行作业?如果您在pyspark shell中,它将在您启动pyspark shell的目录中搜索该文件。请输入文件的完整路径,然后重试。例如:如果文件位于根目录中,请尝试放置以下路径:file:///root/sales.csvWhat 您的“Noted2”中有“commands”吗?您可以发布您从hdfs读取文件的具体操作吗?我正在尝试这个rdd=sc.textFile(“hdfs://master:54310/cc-news-warc-paths1”),这没有任何帮助。
sc.textFile("s3n://my-test-bucket/sales.csv").count() # also returns "15"
var conf = new org.apache.hadoop.conf.Configuration();
var fs = org.apache.hadoop.fs.FileSystem.get(conf);
var filenamePath = new org.apache.hadoop.fs.Path("myfile.json");
if (fs.exists(filenamePath))
{
fs.delete(filenamePath, true);
}
var fin = fs.create(filenamePath);
fin.writeBytes(html);
fin.close();
val metOffice = sql.read.json("myfile.json")