Spark 2.0: относительный путь в абсолютном URI (искровой склад)
Я пытаюсь перейти с Spark 1.6.1 на Spark 2.0.0, и я получаю странную ошибку при попытке прочитать файл csv в SparkSQL. Раньше, когда я читал файл с локального диска в pyspark, я бы сделал:
Искра 1.6
df = sqlContext.read \
.format('com.databricks.spark.csv') \
.option('header', 'true') \
.load('file:///C:/path/to/my/file.csv', schema=mySchema)
В последнем выпуске я думаю, что это должно выглядеть так:
Spark 2.0
spark = SparkSession.builder \
.master('local[*]') \
.appName('My App') \
.getOrCreate()
df = spark.read \
.format('csv') \
.option('header', 'true') \
.load('file:///C:/path/to/my/file.csv', schema=mySchema)
Но я получаю эту ошибку независимо от того, сколько разных способов я пытаюсь настроить путь:
IllegalArgumentException: 'java.net.URISyntaxException: Relative path in
absolute URI: file:/C:/path//to/my/file/spark-warehouse'
Не уверен, что это просто проблема с Windows или что-то мне не хватает. Я был в восторге от того, что пакет spark-csv теперь является частью Spark прямо из коробки, но я не могу заставить его читать какие-либо мои локальные файлы. Любые идеи?
Ответы
Ответ 1
В последней документации Spark я смог выполнить некоторые операции, и я заметил, что у них есть новый параметр конфигурации, который я раньше не заметил:
spark.sql.warehouse.dir
Итак, я пошел дальше и добавил эту настройку, когда я установил свой SparkSession:
spark = SparkSession.builder \
.master('local[*]') \
.appName('My App') \
.config('spark.sql.warehouse.dir', 'file:///C:/path/to/my/') \
.getOrCreate()
Кажется, что установлен рабочий каталог, а затем я могу просто отправить свое имя файла непосредственно в считыватель csv:
df = spark.read \
.format('csv') \
.option('header', 'true') \
.load('file.csv', schema=mySchema)
Как только я установил источник искры, Spark смог найти все мои файлы, и мое приложение успешно завершено. Удивительно, что он работает примерно в 20 раз быстрее, чем в Spark 1.6. Поэтому они действительно сделали очень впечатляющую работу, оптимизируя свой SQL-движок. Ищите его!