Spark-CSVを使用してDataFrameをCSVファイルとして書き込もうとしています( https://github.com/databricks/spark-csv )
以下のコマンドを使用しています
res1.write.option("quoteMode", "NONE").format("com.databricks.spark.csv").save("File")
しかし、私のCSVファイルは常に次のように書き込まれます
「ロンドン」
「コペンハーゲン」
「モスクワ」
の代わりに
ロンドン
コペンハーゲン
モスクワ
はい。二重引用符( ")と円記号(\)のデフォルトのエスケープをオフにする方法は、.write()メソッド呼び出しの後に適切なパラメーターを指定して.option()メソッド呼び出しを追加する必要があります。目標option()メソッド呼び出しの目的は、csv()メソッドが「引用符」文字のインスタンスを「検索」する方法を変更することです。これを行うには、「引用符」が実際に意味するデフォルトを変更する必要があります。つまり、検索する文字を変更します。二重引用符( ")からUnicode"\u0000 "文字(基本的に Unicode NUL文字 を提供します。これは整形式のJSONドキュメント内では発生しません)。
val dataFrame =
spark.sql("SELECT * FROM some_table_with_a_json_column")
val unitEmitCsv =
dataframe
.write
.option("header", true)
.option("delimiter", "\t")
.option("quote", "\u0000") //magic is happening here
.csv("/FileStore/temp.tsv")
これは、Apache Sparkと.csvファイルの発行を試みて学んだいくつかのレッスンの1つにすぎません。これに関する詳細とコンテキストについては、「 例」というタイトルのブログ投稿を参照してください。 Apache Spark ETL Pipeline Integrated a SaaS "。
quoteAll
オプションをfalseに設定すると、テキストの二重引用符を削除できます。
dataframe.write
.option("quoteAll", "false")
.format("csv")
この例は、databricks libを使用せずに、Spark 2.1.0のとおりです。
DataFrameに単一の文字列がある場合は、テキストファイルを直接書き出すことができます。
df.coalesce(1).map({ k:Row => k(0).toString}).toJavaRDD.saveAsTextFile("File")
複数の列がある場合は、出力ファイルに書き込む前にそれらを1つの文字列として組み合わせることができます。
与えられた他の答えは、出力ファイルで不要なnullまたはスペース文字が出力される結果になる可能性があります。
この問題は、私がこれを読むまで長い間気になります: カスタム区切り文字を追加すると、最後に二重引用符が追加されますsparkデータフレームCSV出力
これは標準のCSV機能です。実際のデータに区切り文字が含まれている場合(区切り文字の衝突と呼ばれます)、フィールドは引用符で囲まれます。 df.write.option( "delimiter"、somechar)を試すことができます。ここで、somecharは、データに含まれない文字である必要があります。
複数の列を1つに連結して、データにない区切り文字を使用することができます