我正在使用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")
答案 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)