Spark-找不到分隔符,如何在行尾添加分隔符?

时间:2019-04-18 15:38:24

标签: scala apache-spark dataframe apache-spark-sql amazon-redshift

将数据复制到Redshift时出现错误。在查看stl_load_errors表后,看来原因是由于Delimiter not found

我正在数据框列之间使用组分隔符,并将数据另存为文本文件:

val columns: Array[Column] = salesDF.columns.map(col)
val dataFrame = salesDF.select(concat_ws(String.valueOf(29.toChar), columns: _*)).write.text(outputLocation)

文件中的结果数据如下:

enter image description here

与成功加载到Redshift的文件中的数据进行比较之后,我怀疑问题在于最后没有分隔符。

但是分隔符已经传递给concat_ws。而且我不太了解在保存上述数据时如何实现这一目标?换句话说,如何在每行的末尾添加相同的分隔符?

2 个答案:

答案 0 :(得分:2)

concat_ws函数只会在您提供的值之间添加一个分隔符。要在每行末尾添加其他分隔符,可以使用concat函数。

val sep = String.valueOf(29.toChar)
salesDF.select(concat(concat_ws(sep, columns: _*), lit(sep)))

答案 1 :(得分:2)

尝试以下方法:

val columns: Array[Column] = salesDF.columns.map(c => concat(col(c), typedLit(String.valueOf(29.toChar))))
val dataFrame = salesDF.select(concat(columns: _*)).write.text(outputLocation)