2016-04-07 6 views
0

Spark SQLを使用して大きなCSVファイルを読み込んで共通の列に結合しています。私のコードで結合を実行した後、新しいCSVファイルにテーブルを保存したいと思います。私はこれを行うにはDataFrameのwrite()メソッドを使用しています。ファイルを調べると、ヘッダーが複数回印刷された後、データが続き、さらにヘッダーが続きます。たとえば:Spark SQLでの書き込み時に複数のヘッダー行が印刷される

name, age, addr, job, salary 
name, age, addr, job, salary 
name, age, addr, job, salary 

Bob, 34, 123 Fake St, Programmer, 10000000 
June, 23, 5 Tree Ave., College Student, 15000 
Rick, 12, 43 Ware St., Student, 0 

name, age, addr, job, salary 
name, age, addr, job, salary 
name, age, addr, job, salary 

<more data here> 

この出力は、データフレームクラスのshow()メソッドがコンソールに表を印刷し、私が期待するものが表示さ特に以来、予想外です。

私が書き込みを実行するために使用しているコード:

bigTable.write().mode(SaveMode.Overwrite).format("com.databricks.spark.csv") 
      .option("header", "true").save(settings.getValue().outputDir +"/bigTable.csv"); 

設定を使用する場合option("header", "false")データ値が正しくCSVに保存されます。これはバグですか?

+0

ソースのCSVファイルは何ですか?あなたはどのようにspark-csvでそれらを読むのですか? –

+2

@MiladKhajaviが尋ねる理由は、テキストファイルで、hadoop fs-text/my/dir/*を使ってそれらを見ているなら、多分複数のファイルが存在し、複数のヘッダーがあるからです。 –

+0

@MiladKhajavi、Spark SQL(特にDatabricksのAPIを使用)でそれらを読んでいます。私はいくつかのCSVファイルから読んでいますが、Spark SQLデータフレームを使ってそれらを結合しています。私が参加すると、ヘッダー行が1つしかないことが予想されます。 – dmux

答えて

0

私はpartition()coalesce()機能を使用して解決策を見つけたと信じて:

bigTable.repartition(1).coalesce(1).write().format("com.databricks.spark.csv").option("header", "true").save("myoutputfile.csv"); 

CSVファイルには、私が期待する出力を持っているこれらの呼び出しを追加した後。

関連する問題