我们将Java与Spark结合使用。当前的要求是将一个数据集写入Spark,并以Space作为Delimeter。下面是我尝试过的代码:
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的值设置为“ \ u0000”时,会在文件中添加特殊字符。 我还尝试将Quote Option与明确应用UTF-8编码选项一起使用。
还有其他需要从Java或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"
答案 0 :(得分:1)
答案 1 :(得分:0)
阅读了以下文档。
现在,即使我已将代码更改为使用SEP代替DELIMETER,它也会出现相同的问题,因为Spark添加了\ u0000,它表示一个NULL字符。 试着给出一个空字符串,结果是一样的。
因此,我已转向使用Spark Text格式,并在backgroud中使用Java格式化程序来创建逗号分隔的行。