相关文章推荐
会搭讪的卤蛋  ·  php ...·  2 月前    · 
失恋的酱肘子  ·  javascript - (Jquery) ...·  1 年前    · 

spark.sql写到csv的时候,如果有逗号的话,会导致列的数据移位的问题

0 人关注

我在我的azure databricks笔记本中使用scala作为编程语言,我的数据框架给了我准确的结果,但当我试图将同样的内容存储在csv中时,它将逗号(,)所在的单元格移位了。

spark.sql("""
  SELECT * FROM invalidData
  """).coalesce(1)
      .write
      .option("header", "true")
      .format("com.databricks.spark.csv")
      .mode("overwrite")
      .save(s"$dbfsMountPoint/invalid/${fileName.replace(".xlsx", ".csv")}")

这里有一列数据,如256GB SSD, Keyb.:,所以当使用上述函数写入时,在另一个单元格显示逗号(,)后的字符串。 如果有任何火花内置的解决方案,请联系我们...

1 个评论
Spark应该自动给包含分隔符的值加引号(如果你喜欢 spark.apache.org/docs/latest/.. .你可以改变引号字符)。但是你用来读取这个csv文件的软件应该被配置为使用与你写作时相同的引号字符。
scala
csv
azure-databricks
comma
spark-notebook
Manish Jain
Manish Jain
发布于 2021-10-25
1 个回答
tjheslin1
tjheslin1
发布于 2021-10-25
0 人赞同

正如@Jasper-M指出的那样,你可以用一个自定义的分隔符来写输出的csv。

在这个例子中,我们使用 | 作为分隔符。

spark.sql("""
  SELECT * FROM invalidData
  """).coalesce(1)
      .write
      .option("header", "true")
      .format("com.databricks.spark.csv")
      .option("sep", "|")
      .mode("overwrite")
      .save(s"$dbfsMountPoint/invalid/${fileName.replace(".xlsx", ".csv")}")

值得注意的是, save方法接收的是一个保存路径,而不是文件名本身。一个.csv file (1 file since you set .coalesce(1)`)将被保存在这个路径下,把这个输入当作一个目录。

要把.csv读回来,用spark。

spark.read.format("com.databricks.spark.csv")