Databrick CSV не может найти локальный файл - PullRequest
0 голосов
/ 13 ноября 2018

В программе, которую я извлек из csv из Excel, мне нужно загрузить CSV в hdfs и сохранить его в формате паркета, не имеет значения с версией Python или Spark, пожалуйста, без Scala.

Почти все обсуждения, с которыми я сталкивался, касаются блока данных, однако, кажется, не удается найти файл, вот код и ошибка:

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

Спасибо.

Ответы [ 2 ]

0 голосов
/ 12 декабря 2018

Да, вы правы, файл должен присутствовать на всех рабочих узлах.Что ж.Вы все еще можете прочитать локальный файл в режиме кластера пряжи.вам просто нужно добавить файл с помощью addFile.

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

spark скопирует файл на каждый узел, где будет создан исполнитель, и сможет обработать ваш файл также в режиме кластера.Я использую версию spark 2.3, чтобы вы могли соответствующим образом изменить свой контекст spark, но метод addFile остался прежним.

Попробуйте сделать это с вашей пряжей (режим кластера) и дайте мне знать, работает ли она для вас.

0 голосов
/ 14 ноября 2018

Я нашел проблему сейчас!

Причина, по которой ошибки из файла не найдены , действительно верна, потому что я использовал 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)
...