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-движок. Ищите его!