Databrick csv 找不到本地文件

Databrick csv cannot find local file

在我从 excel 中提取 csv 的程序中,我需要将 csv 上传到 hdfs 并将其保存为 parquet 格式,与 python 版本或 spark 版本无关,不斯卡拉请。

我遇到的几乎所有讨论都是关于数据块的,但是,似乎找不到文件,这是代码和错误:

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: File file:/home/rxie/csv_out/wamp.csv does not exist

文件路径:

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

谢谢。

我现在找到问题了!

file not found 错误的原因实际上是正确的,因为我使用 Spark Context 和 setMaster("yarn-cluster"),这意味着所有工作节点都将查找 csv 文件,当然所有工作节点(启动程序的节点除外) csv 所在)没有此文件,因此出错。我真正应该做的是使用 setMaster("local").

修复:

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)

是的,你是对的,该文件应该出现在所有工作节点上。 出色地。您仍然可以在 yarn 集群模式下读取本地文件。您只需要使用 addFile 添加您的文件。

spark.sparkContext.addFile("file:///your local file path ")

spark 会将文件复制到将创建执行程序的每个节点,并且也能够在集群模式下处理您的文件。 我使用的是 spark 2.3 版本,因此您可以相应地更改您的 spark 上下文,但 addFile 方法保持不变。

用你的 yarn(集群模式)试试这个,让我知道它是否适合你。