windows - Spark 2.0 : Relative path in absolute URI (spark-warehouse)

标签 windows apache-spark pyspark apache-spark-sql pyspark-sql

我正在尝试从 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)

在最新版本中我认为它应该是这样的:

星火 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 的一部分,开箱即用,但我似乎无法再让它读取我的任何本地文件了。有什么想法吗?

最佳答案

我能够在最新的 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 仓库,Spark 就能够找到我的所有文件并且我的应用现在成功完成。令人惊奇的是,它的运行速度比 Spark 1.6 快了大约 20 倍。所以他们确实做了一些非常令人印象深刻的工作来优化他们的 SQL 引擎。点燃它!

关于windows - Spark 2.0 : Relative path in absolute URI (spark-warehouse),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38669206/

相关文章:

ruby - 有没有人得到一个在 Windows 上工作的 ruby​​ memcached 客户端?

json - 阅读 Pyspark Struct Json Column 非必需元素

python - 替换 PySpark 中的字符串

windows - 页面文件中的物理页面和页面之间有什么关系?

c# - 为什么我在 Windows 10 UWP 上收到 "package could not be registered"部署错误?

windows - pkg-config:找不到命令,在 Windows 7 上使用 cygwin

macos - Zeppelin java.lang.NoClassDefFoundError : Could not initialize class org. apache.spark.rdd.RDDOOperationScope$

scala - Spark SQL : How to append new row to dataframe table (from another table)

python - Spark 数据框添加带有随机数据的新列

python - 如何计算 Spark RDD 中出现的次数并将其作为字典返回?