Python PySpark 2.4-使用自定义行分隔符读取CSV文件

Python PySpark 2.4-使用自定义行分隔符读取CSV文件,python,csv,apache-spark,pyspark,text-parsing,Python,Csv,Apache Spark,Pyspark,Text Parsing,2017年,spark增加了对自定义行分隔符(用于各种文本文件格式)的支持(请参阅) 。。。或者,它可能没有在2017年加入——或者从未加入(见:) 今天,使用Pyspark 2.4.0,我无法使用自定义行分隔符来解析CSV文件 下面是一些代码: from pyspark.sql.types import ( StructType, StructField, StringType ) list_structs = StructType([StructField('id'

2017年,spark增加了对自定义行分隔符(用于各种文本文件格式)的支持(请参阅)

。。。或者,它可能没有在2017年加入——或者从未加入(见:)

今天,使用Pyspark 2.4.0,我无法使用自定义行分隔符来解析CSV文件

下面是一些代码:

from pyspark.sql.types import (
    StructType,
    StructField,
    StringType
)

list_structs = StructType([StructField('id', StringType(), True),StructField('desc', StringType(), True)])

df = spark.read.load("mnt/one.csv",
                     format="csv", 
                     sep="\x1e",
                     schema=list_structs)
print("one.csv rowcount: {}".format(df.count()))

df2 = spark.read.load("mnt/two.csv",
                     format="csv", 
                     sep="\x1e",
                     lineSep="\x1d",
                     schema=list_structs)
print("two.csv rowcount: {}".format(df2.count()))
以下是两个示例csv文件: one.csv-行由换行符“0A”分隔。

"1","foo"
"2","bar"
"3","foobar"
"1","foo""2","bar""3","foobar"
two.csv-行由组分隔符字符“1D”分隔。

"1","foo"
"2","bar"
"3","foobar"
"1","foo""2","bar""3","foobar"
我希望代码的输出为: 1.csv行数:3 2.csv行数:3

我收到的输出是: 1.csv行数:3 two.csv行数:1


以及如何让Pyspark接受组分隔符char作为行分隔符的想法?

我可以通过以下方法获得想要的结果:

import pandas as pd

padf = pd.read_csv("/dbfs/mnt/two.csv",
                  engine="c",
                  sep="\x1e",
                  lineterminator ="\x1d",
                  header=None,
                  names=['id','desc'])
df = sqlContext.createDataFrame(padf)
print("two.csv rowcount: {}".format(df.count()))
这取决于panda,这里可能会读取两次数据(我不确定从panda数据帧创建RDD时内部会发生什么情况)