所以,我真的需要帮助解决一件愚蠢的事情,但显然我自己无法处理它。
我有一组以此格式排列的行(在OSX上使用
所以分隔符是
我有一组以此格式排列的行(在OSX上使用
less
读取):XXXXXXXX^GT^XXXXXXXX^G\N^G0^GDL^G\N^G2018-09-14 13:57:00.0^G2018-09-16 00:00:00.0^GCompleted^G\N^G\N^G1^G2018-09-16 21:41:02.267^G1^G2018-09-16 21:41:02.267^GXXXXXXX^G\N
YYYYYYYY^GS^XXXXXXXX^G\N^G0^GDL^G\N^G2018-08-29 00:00:00.0^G2018-08-29 23:00:00.0^GCompleted^G\N^G\N^G1^G2018-09-16 21:41:03.797^G1^G2018-09-16 21:41:03.81^GXXXXXXX^G\N
所以分隔符是
BEL
分隔符,我是这样加载CSV的:val df = sqlContext.read.format("csv")
.option("header", "false")
.option("inferSchema", "true")
.option("delimiter", "\u2407")
.option("nullValue", "\\N")
.load("part0000")
但是当我阅读它时,它只将行作为一列读取,就像这样:
XXXXXXXXCXXXXXXXX\N0DL\N2018-09-15 00:00:00.02018-09-16 00:00:00.0Completed\N\N12018-09-16 21:41:03.25712018-09-16 21:41:03.263XXXXXXXX\N
XXXXXXXXSXXXXXXXX\N0DL\N2018-09-15 00:00:00.02018-09-15 23:00:00.0Completed\N\N12018-09-16 21:41:03.3712018-09-16 21:41:03.373XXXXXXXX\N
似乎在^G
的位置上有一个未知字符
(你在stackoverflow上看不到,因为我在此处进行了格式化)。
更新: 这可能是scala的spark限制吗? 如果我以以下方式运行代码:
val df = sqlContext.read.format("csv")
.option("header", "false")
.option("inferSchema", "true")
.option("delimiter", "\\a")
.option("nullValue", "\\N")
.load("part-m-00000")
display(df)
I get a big fat
java.lang.IllegalArgumentException: Unsupported special character for delimiter: \a
如果我使用Python运行:
df = sqlContext.read.format('csv').options(header='false', inferSchema='true', delimiter = "\a", nullValue = '\\N').load('part-m-00000')
display(df)
一切都很好!