2017-09-19 2 views
1

に持続しません:パイソン&スパーク:DATAFRAME書き込みは、私は、ローカルファイルシステムへの私のデータフレームを作成したいファイルシステム

path = "/tmp/test" 

df = spark.sql(select_str) 
df.write.parquet(path, mode="overwrite", compression="snappy") 

コードがエラーなしで実行されますが、私はtmpに見たときに何testがないと私は戻ってpyarrow寄木細工にそれを読みたい場合も:

IOError: Passed non-file path: /tmp/test 

parquet = pq.ParquetDataset(path) 

私はエラーを取得します

同じことが起こるhdfs://tmp/test

ここで私は何が分からないのですか?

EDIT

私はそれを使用する前に、最初の実際のファイルを作成してみました。そこで/tmp/parquet.parquetを作成しました。ファイルを読み込めるようになりましたが、ファイルは常に空です。だから、この作文はうまくいきません。

EDIT 2

スパーク構成:

spark = SparkSession.builder \ 
    .master("yarn") \ 
    .appName("my_app") \ 
    .config("spark.driver.bindAddress", "0.0.0.0") \ 
    .config("spark.driver.host", host) \ 
    .config("spark.driver.port", port) \ 
    .config("spark.driver.memory", "4G") \ 
    .config("spark.executor.memory", "8G") \ 
    .config("spark.blockManager.port", portBlockManager) \ 
    .enableHiveSupport() \ 
    .getOrCreate() 

答えて

1

メートルであなたはスパークアプリケーションを実行していますか?クライアント/クラスタ/スタンドアロン? ファイルをローカルファイルシステムに保存しようとしているので、実際にドライバがどこのマシンで実行されているかを知る必要があります。

クラスタモードの場合、リソースマネージャによってドライバが作成されたクラスタ上のノードにファイルが書き込まれている可能性が非常に高くなります。そして、あなたの最善の方法はファイルをhdfsに保存することです。デフォルトではdf.write.parquet(path, mode="overwrite", compression="snappy")がこれを行います。

デフォルトでは、使用されるファイルシステムはhdfsになりますので、/tmp/testを指定するだけで、ローカルファイルシステムではなくhdfsでそのパスが検索されます。

また、pq.ParquetDatasetでpyarrowライブラリを使用していると思いますが、デフォルトではローカルファイルシステムのパスが検索されます。

読み取り/書き込み中に正しいファイルシステムを使用していることを確認して解決します。

0

試行:

"file:///tmp/test" 

代わりに:

"/tmp/test" 
+0

これは同じ結果をもたらします – Mulgard

関連する問題