【问题标题】:Escape New line character in Spark CSV read在 Spark CSV 读取中转义换行符
【发布时间】:2018-07-25 18:50:42
【问题描述】:

我正在开发 Spark 2.2.1 版本并使用以下 python 代码,我可以转义特殊字符,例如 @ : 我想转义特殊字符,如换行符(\n)和回车符(\r)。我替换了@ 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")

【问题讨论】:

    标签: python apache-spark dataframe pyspark


    【解决方案1】:

    如果您的目标是读取包含多个换行符的文本内容的 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 语法会略有不同,但应该可以正常工作。

    【讨论】:

    • 能否请您指出我可以看到 Scala 代码的正确链接
    • 我在答案中添加了它
    • 谢谢。但是上面的答案使用熊猫,而不是火花。这不适用于巨大的 csv。
    • 我有 spark2.2 ,但仍然选项 multiLine 不起作用。
    • 即使 multiLine 为 True,\r\n 组合仍然存在问题,其中 \r 可以保留。使用上面的 read 语句,我看到最右边的列标题以 \r 结尾,最后一列中的一些行也以 \r 结尾。
    【解决方案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)
    

    你可以用上面的代码sn-p替换任何特殊字符。

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

    spark_df = sqlContext.createDataFrame(pandas_df)
    

    【讨论】:

    • 这只有在你可以使用 pandas 读取本地机器上的整个文件时才有效。
    猜你喜欢
    • 1970-01-01
    • 2017-01-20
    • 2021-03-30
    • 1970-01-01
    • 2015-11-11
    • 1970-01-01
    • 1970-01-01
    • 2020-08-05
    • 1970-01-01
    相关资源
    最近更新 更多