在我从excel中提取了csv的程序中,我需要将csv上传到hdfs并保存为拼花格式,与python版本或spark版本无关,请不要使用scala。
我遇到的几乎所有讨论都是关于databrick的,但是,似乎找不到文件,这是代码和错误:
df = sqlContext.read.format("com.databricks.spark.csv").option("header", "true").option("inferSchema","true").option("delimiter",",").load("file:///home/rxie/csv_out/wamp.csv")
错误:
java.io.FileNotFoundException:文件文件:/home/rxie/csv_out/wamp.csv 不存在
文件路径:
ls -la /home/rxie/csv_out/wamp.csv
-rw-r--r-- 1 rxie linuxusers 2896878 Nov 12 14:59 /home/rxie/csv_out/wamp.csv
谢谢。
答案 0 :(得分:0)
我现在发现了问题!
由于未找到 文件 而导致错误的原因实际上是正确的,因为我正在将Spark Context与setMaster(“ yarn-cluster”一起使用 ”),这意味着所有工作节点都将查找csv文件,当然,所有工作节点(启动csv所在程序的节点除外)都没有此文件,因此会出错。我真正应该做的是使用 setMaster(“ local”) 。
FIX:
conf = SparkConf().setAppName('test').setMaster("local")
sc = SparkContext(conf=conf)
sqlContext = SQLContext(sc)
csv = "file:///home/rxie/csv_out/wamp.csv"
df = sqlContext.read.format("com.databricks.spark.csv").option("header", "true").option("inferSchema","true").option("delimiter",",").load(csv)
答案 1 :(得分:0)
是的,是的,该文件应该存在于所有工作节点上。 好。您仍然可以在纱线簇模式下读取本地文件。您只需要使用addFile添加文件即可。
spark.sparkContext.addFile("file:///your local file path ")
spark会将文件复制到将在其中创建执行程序的每个节点,并且也可以在群集模式下处理您的文件。 我使用的是spark 2.3版本,因此您可以相应地更改spark上下文,但是addFile方法保持不变。
尝试使用您的纱线(群集模式),让我知道它是否适合您。