csv - 在 PYSPARK 中读取具有可变数量逗号的 CSV 文件作为数据框
问题描述
我有一个逗号分隔的文件,没有标题,每行中有不同数量的项目,用逗号分隔,例如:
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
解决方案
假设已知 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|
+-----+-----+-----+-----+-----+
推荐阅读
- python - python对开头有数字的字符串进行排序
- excel - 宏不过滤日期
- android - 后台应用程序是否可以始终访问相机?
- atom-editor - Atom,如何在 MAC 上导入 PHP 命名空间和类
- ruby-on-rails - 在验证器方法中编写验证以外的逻辑 - rails 5
- java - 使用 OpenJDK 11 编译时出现 JasperException
- python - minuit 给出了神秘的 valueError
- c# - NLOG:如何使用变量来指定目标
- android - SSO 到 ChromeOS 上的 Office 365 Android 应用程序
- bazel - Bazel genrules 是否提供临时目录?