【问题标题】:Read CSV file with variable number of commas as a data frame in PYSPARK在 PYSPARK 中读取具有可变数量逗号的 CSV 文件作为数据框
【发布时间】:2019-07-19 12:48:55
【问题描述】:

我有一个逗号分隔的文件,没有标题,每行中的项目数不同,用逗号分隔,例如:

a, x1, x2  
b, x3, x4, x5  
c, x6, x7, x8, x9  

第一行仅包含 3 个项目,后续行包含更多,因此似乎仅从第一行推断列数,因此它会跳过其他行中第 3 个逗号之后的任何内容,并且数据丢失。

spark = init_spark()
df= spark.read.csv(filename)
print (df.take(3))

我明白了:

[Row(_c0='a', _c1=' x1', _c2=' x2'),  
Row(_c0='b', _c1=' x3', _c2=' x4'),   
Row(_c0='c', _c1=' x6', _c2=' x7')]  
pyspark.sql.readwriter 模块中的

mode="PERMISSIVE"
没有解决问题,可能是没有header的原因

【问题讨论】:

标签: csv apache-spark pyspark apache-spark-sql


【解决方案1】:

假设已知最大数量的 col 或逗号分隔值 并给出文件 a.csv

col_a,col_b,col_c,col_d,col_e
1,2,3,4,5
1,2,3,e
1,a,b
schema = StructType([
    StructField("col_a", StringType(), True),
    StructField("col_b", StringType(), True),
    StructField("col_c", StringType(), True),
    StructField("col_d", StringType(), True),
    StructField("col_e", StringType(), True)
])

df = spark.read.csv("a.csv",header=True,schema=schema)

df.show()

结果

+-----+-----+-----+-----+-----+
|col_a|col_b|col_c|col_d|col_e|
+-----+-----+-----+-----+-----+
|    1|    2|    3|    4|    5|
|    1|    2|    3|    e| null|
|    1|    a|    b| null| null|
+-----+-----+-----+-----+-----+

【讨论】:

  • 对我来说,这会导致所有没有完整逗号数(在本例中为 4 个逗号)的行出现格式错误
  • 是吗?我用我本地的 pyspark 2.4.4 运行它,它没有显示任何错误。
  • 一个区别是我有header=False。我正在使用 2.4.3
  • 通过测试我刚刚发现主要问题是我明确指定了mode='FAILFAST'
猜你喜欢
  • 1970-01-01
  • 2018-05-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-09-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多