Читайте локальные файлы в фрейме данных spark в zeppelin, работающем в докере
Я пытаюсь написать код Spark в Zeppelin, используя изображение докера apache zeppelin на моем ноутбуке. Все работает, как и ожидалось, за исключением чтения файлов с локального диска, например, когда я пытаюсь прочитать файл CSV в кадре данных Spark
val df = spark.read.csv("/User/myname/documents/data/xyz.csv")
Я получаю следующую ошибку:
org.apache.spark.sql.AnalysisException: Path does not exist: file:/User/myname/documents/data/xyz.csv;
at org.apache.spark.sql.execution.datasources.DataSource$$anonfun$14.apply(DataSource.scala:382)
at org.apache.spark.sql.execution.datasources.DataSource$$anonfun$14.apply(DataSource.scala:370)
at scala.collection.TraversableLike$$anonfun$flatMap$1.apply(TraversableLike.scala:241)
at scala.collection.TraversableLike$$anonfun$flatMap$1.apply(TraversableLike.scala:241)
at scala.collection.immutable.List.foreach(List.scala:381)
at scala.collection.TraversableLike$class.flatMap(TraversableLike.scala:241)
at scala.collection.immutable.List.flatMap(List.scala:344)
at org.apache.spark.sql.execution.datasources.DataSource.resolveRelation(DataSource.scala:370)
at org.apache.spark.sql.DataFrameReader.load(DataFrameReader.scala:152)
at org.apache.spark.sql.DataFrameReader.csv(DataFrameReader.scala:415)
at org.apache.spark.sql.DataFrameReader.csv(DataFrameReader.scala:352)
... 47 elided
1 ответ
Решение
Я думаю, что нашел ответ: я вытащил образ докера (я использовал тот, что ниже, но вы можете изменить его)
docker pull skymindops/zeppelin-dl4j
А потом побежал:
docker run -it --rm -p 7077:7077 -p 8080:8080 --privileged=true -v $PWD/logs:/logs -v $PWD/notebook:/notebook -v $PWD/data:/data \
-e ZEPPELIN_NOTEBOOK_DIR='/notebook' \
-e ZEPPELIN_LOG_DIR='/logs' \
skymindops/zeppelin-dl4j:latest
Теперь чтение файлов из папки данных будет работать:
val df = spark.read.option("header", "true").csv("/data/xyz.csv")
Обратите внимание, что мне не нужны записные книжки уже на этом изображении.