【问题标题】:Spark - Delimiter not found, how to add a separator in the end of the line?Spark - 找不到分隔符,如何在行尾添加分隔符?
【发布时间】:2019-09-08 23:51:30
【问题描述】:

将数据复制到 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)

文件中的结果数据如下所示:

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

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

【问题讨论】:

  • 你试过df.write.option("sep","YOUR_SEPARATOR")吗?

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


【解决方案1】:

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

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

【讨论】:

    【解决方案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)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-08-20
      • 2021-10-06
      • 1970-01-01
      • 1970-01-01
      • 2015-12-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多