从databrick在adls gen 1中写入tsv文件时行分隔符更改

时间:2020-07-25 15:53:33

标签: apache-spark pyspark jupyter-notebook azure-functions databricks

我要将tsv文件保存到adls gen1。使用以下命令保存数据,但是将行定界符写为“ \ n”(LF),我想写行定界符“ \ r \ n”

df.coalesce(1).write.mode("overwrite").format("csv").options(delimiter="\t",header="true",nullValue= None,lineSep ='\r\n').save(gen1temp)

我有400多个列和2M行,文件大小为6GB。 请提供最佳的帮助。

1 个答案:

答案 0 :(得分:0)

仅在Spark 3.0中支持CSV文件的lineSep选项,而在2.4之类的早期版本中则不存在,因此可以忽略。

最初,我想到了以下解决方法-将\r附加到最后一列:

from pyspark.sql.functions import concat, col, lit

data = spark.range(1, 100).withColumn("abc", col("id")).withColumn("def", col("id"))
cols = map(lambda cn: col(cn), data.schema.fieldNames())
cols[-1] = concat(cols[-1].cast("string"), lit("\r"))
data.select(cols).write.csv("1.csv")

但是不幸的是,它不起作用-看起来好像在将数据写入CSV时正在剥离结尾空格...