在2017年增加了对自定义行分隔符(用于各种文本文件格式)的支持(请参阅:https://github.com/apache/spark/pull/18581)。
...或者可能是在2017年没有添加-甚至从来没有(请参阅:https://github.com/apache/spark/pull/18304)
今天,在Pyspark 2.4.0中,我无法使用自定义行分隔符来解析CSV文件。
以下是一些代码:
Cannot infer type argument(s) for <R> flatMap(Function<? super T,? extends Stream<? extends R>>)
这是两个示例csv文件: one.csv-行由换行字符'0A'
分隔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()))
two.csv-行由组分隔符“ 1D”分隔
"1","foo"
"2","bar"
"3","foobar"
我希望代码的输出为: one.csv行数:3 two.csv行数:3
我收到的输出是: one.csv行数:3 two.csv行数:1
关于如何让Pyspark接受组分隔符char作为行分隔符的想法?
答案 0 :(得分:0)
我可以用以下方法得到想要的结果:
"1","foo""2","bar""3","foobar"
这取决于熊猫,并且这里的数据可能会被读取两次(我不确定从熊猫dataFrame创建RDD时内部会发生什么情况。)