簡體   English   中英

使用 SPARK 寫入 CSV 時從字符串類型數據中刪除雙引號

[英]Removing Double Quotes from String type data while writing CSV using SPARK

我們在 Spark 中使用 Java。 當前要求是將 Dataset 寫入 Spark ,以 Space 作為分隔符。 以下是我嘗試過的代碼:

 fooDataSetObject.coalesce(1).map((MapFunction<FooDataSet, FooDataSet>) fooDataSet -> 
 FileOperations.call(fooDataSet,broadcastedProperty),encoder).select("column","cons_zero",
            "columnA","columnB","columnC","columnD",
            "constants_value")
            .write()
            .format("com.databricks.spark.csv")
            .option("inferSchema", true)
            .option(Constants.DELIMITER, " ")
            .option(Constants.IGNORE_LEADING_WHITESPACE, ApplicationConstants.FALSE)
            .option(Constants.IGNORE_TRAILING_WHITESPACE, ApplicationConstants.FALSE)
            .option("quote", " ")
            .mode(SaveMode.Overwrite)
            .save(path);

我使用 QuoteMode 作為 None 但沒有用。 當我嘗試使用 Quote Option with Value as "\" 時,它會向文件添加特殊字符。 我還嘗試使用 Quote Option 並顯式應用 UTF-8 編碼選項。

從 Java 或 SPARK 的配置端還有什么需要做的嗎? 我在提交 spark 作業並將編碼器指定為 UTF-8 時嘗試使用 --conf 作為參數。

任何幫助或建議表示贊賞。

示例數據集值:

|  00123400|   93115212345678|     16|       0C|Tickets Cash-back |                57695857|           602140|                24394483|                          24394483|        0|                  99|60214057695857Tic...|66754325-83d1-426...|          24|                null|   01|c28380c5-c926-4b4...|Identity Defence  |Let's Go...Rewards|             null|     null|         ON|    17|          12345678|GB 29 NWBK 12345 ...|         931152|            null|cb032911-4c4e-406...|                     null|            20987|ABC...|                 GBR|                962000|             cashback|null|X Batch        |                null|                    99|12345             |
|  00123400|   93115212345678|     17|       0C|Tickets Cash-back |                57695857|           602140|                24394483|                          24394483|        0|                  99|60214057695857Tic...|23703242-e130-48b...|          24|                null|   01|a4e52b47-8866-4d1...|Identity Defence  |Let's Go...Rewards|             null|     null|         ON|    17|          12345678|GB 29 NWBK 12345 ...|         931152|            null|ee98f2e8-f489-4f3...|                     null|            20987|ABC...|                 GBR|                962000|             cashback|null|X Batch        |                null|                    99|12345             |
|  00123400|   93115212345678|     19|       0C|Tickets Cash-back |                57695857|           602140|                24394483|                          24394483|        0|                  99|60214057695857Tic...|c7138601-b26d-49d...|          24|                null|   01|dfefcf96-4f56-4ab...|Identity Defence  |Let's Go...Rewards|             null|     null|         ON|    17|          12345678|GB 29 NWBK 12345 ...|         931152|            null|dd9027bd-4fcd-45d...|                     null|            20987|ABC...|                 GBR|                962000|             cashback|null|X Batch        |                null|                    99|12345             |
|  00123400|   93115212345678|     20|       0C|Tickets Cash-back |                57695857|           602140|                24394483|                          24394483|        0|                  99|60214057695857Tic...|63cbd563-2af4-472...|          24|                null|   01|9629f346-7dde-429...|Identity Defence  |Let's Go...Rewards|             null|     null|         ON|    17|          12345678|GB 29 NWBK 12345 ...|         931152|            null|7b9d0698-0de1-45d...|                     null|            20987|ABC...|                 GBR|                962000|             cashback|null|X Batch        |                null|                    99|12345             |

輸出:

93115212345678 0 "GB 29 NWBK 12345 78978911     " 00123400 "12345             " 99 "60214057695857Tickets Cash-back 0"

請使用此代碼。

.option("quote", "\"")
.option("escape", "\"")

有關更多信息,請參閱Apache Spark 的 CSV 數據源

瀏覽了以下文檔。

  1. quote (default "): 設置用於轉義引用值的單個字符,其中分隔符可以是值的一部分。如果你想關閉引號,你需要設置的不是空字符串而是空字符串。這種行為不同於com.databricks.spark.csv。
  2. 轉義(默認):設置單個字符,用於在已引用的值中轉義引號。

現在,即使我已將代碼更改為使用 SEP 而不是 DELIMETER,它也會出現同樣的問題,因為 Spark 添加了代表 NULL 字符的 \。 嘗試給出一個空字符串,結果相同。

所以我已經轉向使用 Spark Text 格式,並且我在后台使用 Java 格式化程序來創建我的逗號分隔行。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM