转义Spark CSV中的新行字符

时间:2018-02-15 04:39:36

标签: python apache-spark dataframe pyspark

我正在使用Spark 2.2.1版本并使用下面的python代码,我可以转义像@这样的特殊字符: 我想要转义特殊字符,如换行符(\ n)和回车符(\ r \ n)。我替换了@ which \ n,但它没有用。请提出任何建议。

工作:

spark_df = spark.read.csv(file.csv,mode="DROPMALFORMED",inferSchema=True,header =True,escape="@")

不工作:

spark_df = spark.read.csv(file.csv,mode="DROPMALFORMED",inferSchema=True,header =True,escape="\n")

2 个答案:

答案 0 :(得分:4)

如果您的目标是阅读包含多个换行符的文字内容的csv,那么可以使用spark multiline option

我最近发布了scala there的一些代码。

val df = spark.read
.option("wholeFile", true)
.option("multiline",true)
.option("header", true)
.option("inferSchema", "true")
.option("dateFormat", "yyyy-MM-dd")
.option("timestampFormat", "yyyy-MM-dd HH:mm:ss")
.csv("test.csv")

python语法略有不同,但应该运行良好。

答案 1 :(得分:2)

您可以使用pandas实现此目的。

示例代码:

pandas_df = pd.read_csv("file.csv")
pandas_df = pandas_df.replace({r'\\r': ''}, regex=True)
pandas_df = pandas_df.replace({r'\\n': ''}, regex=True)

您可以使用上面的代码段替换任何特殊字符。

稍后您可以根据需要将pandas_df转换为spark_df。

spark_df = sqlContext.createDataFrame(pandas_df)