【问题标题】:PySpark read CSV file with custom record separatorPySpark 使用自定义记录分隔符读取 CSV 文件
【发布时间】:2021-05-25 17:47:15
【问题描述】:

在 pyspark 中读取 csv 文件时,有什么方法可以使用自定义记录分隔符。在我的文件中,记录由** 分隔,而不是换行符。将 csv 读入 PySpark 数据帧时,是否有任何方法可以使用此自定义行/记录分隔符?

【问题讨论】:

标签: python python-3.x pyspark apache-spark-sql


【解决方案1】:

与这里Read a file in pyspark with custom column and record delmiter的答案相同

我会将它作为纯文本文件读取到 rdd 中,然后在作为换行符的字符上拆分。然后将其转换为数据框 像这样

rdd1= (sc
       .textFile("/jupyter/nfs/test.txt")
       .flatMap(lambda line: line.split("**"))
       .map(lambda x: x.split(";"))
      )
df1=rdd1.toDF(["a","b","c"])
df1.show()

+---+---+---+
|  a|  b|  c|
+---+---+---+
| a1| b1| c1|
| a2| b2| c2|
| a3| b2| c3|
+---+---+---+

或者如果这样


rdd2= (sc
       .textFile("/jupyter/nfs/test.txt")
       .flatMap(lambda line: line.split("**"))
       .map(lambda x: [x])
      )
df2=(rdd2
     .toDF(["abc"])
     .withColumn("a",f.split(f.col("abc"),";")[0])
     .withColumn("b",f.split(f.col("abc"),";")[1])
     .withColumn("c",f.split(f.col("abc"),";")[2])
     .drop("abc")
    )
df2.show()

+---+---+---+
|  a|  b|  c|
+---+---+---+
| a1| b1| c1|
| a2| b2| c2|
| a3| b2| c3|
+---+---+---+

test.txt 的样子

a1;b1;c1**a2;b2;c2**a3;b2;c3

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-12-15
    • 2021-08-14
    • 2020-12-17
    • 2017-12-16
    • 1970-01-01
    • 2020-05-06
    • 2017-01-20
    • 2018-03-03
    相关资源
    最近更新 更多