Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Apache spark 加载本地文件(非HDFS)在Spark时失败_Apache Spark_Pyspark - Fatal编程技术网

Apache spark 加载本地文件(非HDFS)在Spark时失败

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

我有一个问题-如何在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.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")