在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'字段选择哪些其他元素。因为您的期望与输入文件记录不匹配。 因此,您可以根据需要更改元素位置。

注意 -具有'O''P'的 rdd 元素将从第 0 个位置开始定位在x[3]

最新更新