python-3.x - 在 python 或 pyspark 中使用条件模式读取数据文件
问题描述
我有一个数据文件,我想在 python 或 pyspark 中处理,但不确定如何定义条件模式。文件布局如下图所示:
10000012345,0,2,O,20081016,0.00,200.00
10000011223,0,1,P,20190817,0,3.00,4.00
检查第四个字段,它可以有值O或P,前三个字段将在每条记录中通用。记录类型 O 和 P 的其余字段的编号和数据类型各不相同。
我需要类似的架构:
string field1,
string field2,
decimal field3,
string field4
if field4 == "P"
string field5,
string field6
if field4 == "O"
string field7,
decimal field8
解决方案
您的输入文件在第一条记录中有 7 个字段,在第二条记录中有 8 个字段,分别位于第四位的“O”和“P”。
10000012345,0,2,O,20081016,0.00,200.00
10000011223,0,1,P,20190817,0,3.00,4.00
我认为您所期望的可以使用 rdd 来完成。
df = sc.textFile(path).map(lambda x: x.split(",")) \
.map(lambda x :((x[0],x[1],x[2],x[3],x[5],x[6]) if x[3]=='O' else (x[0],x[1],x[2],x[3],x[6],x[7]))) \
.toDF(['field1','field2','field3','field4','field5','field6'])
>>> df.show()
+-----------+------+------+------+------+-------+
| field1|field2|field3|field4|field5| field6|
+-----------+------+------+------+------+-------+
|10000012345| 0| 2| O| 0.00|200.00 |
|10000011223| 0| 1| P| 3.00| 4.00|
+-----------+------+------+------+------+-------+
我不太确定您希望选择哪些其他元素'O'
以及'P'
给定位置的字段。由于您的期望与输入文件记录不匹配。因此,您可以根据需要更改元素位置。
注意- rdd
元素从第 0 个位置开始,具有'O'
和'P'
将被定位。x[3]
推荐阅读
- javascript - beforeSend: fetch API 中的 function()
- python - 有没有类似于 Python 中 PHP 的 list 函数的东西?
- python - Python,硒陈旧元素引用错误
- python - Python discord-bot 用户令牌不起作用
- rcpp - Rcpp 查找唯一字符向量
- php - 使用 PHP Laravel (Array_push) 添加新的对象数据
- swift - 没有特定扩展的 Xcode 构建方案配置
- go - 每次 set 调用后都会重置 bigcache
- javascript - 图标不与模板结果一起呈现 | 404错误
- arrays - 我需要帮助优化上个月在面试中提出的数组问题