Spark 1.6.1からSpark 2.0.0に移行しようとしています。csvファイルをSparkSQLに読み取ろうとすると、奇妙なエラーが発生します。 。以前は、pysparkでローカルディスクからファイルを読み取るとき、次のようにしました。
Spark 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.
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=はすべてのファイルを見つけることができ、アプリは正常に終了しました。驚くべきことは、約20 Spark 1.6。よりもはるかに高速です。したがって、彼らは実際にSQLエンジンを最適化するいくつかの非常に印象的な作業を行いました。Spark it!