pyspark 如何将表转换为数组

rt4zxlrg  于 2023-03-22  发布在  Spark
关注(0)|答案(2)|浏览(231)

我有一个表如下

| item_name | item_value | timestamp |
|:---- |:------:| -----:|
|  A | 0.25    | 2023-03-01T17:20:00.000+0000 |
|  B | 0.34    | 2023-03-01T17:20:00.000+0000 |
|  A | 0.30    | 2023-03-01T17:30:00.000+0000 |
|  B | 0.54    | 2023-03-01T17:30:00.000+0000 |
|  A | 0.32    | 2023-03-01T17:35:00.000+0000 |
|  B | 0.67    | 2023-03-01T17:35:00.000+0000 |

我怎么把它转换成

[[0.25, 0.34], [0.30,0.54],[0.32,0.67]]

任何帮助都将不胜感激!

mm5n2pyu

mm5n2pyu1#

给定:

table = """| item_name | item_value | timestamp |
|:---- |:------:| -----:|
|  A | 0.25    | 2023-03-01T17:20:00.000+0000 |
|  B | 0.34    | 2023-03-01T17:20:00.000+0000 |
|  A | 0.30    | 2023-03-01T17:30:00.000+0000 |
|  B | 0.54    | 2023-03-01T17:30:00.000+0000 |
|  A | 0.32    | 2023-03-01T17:35:00.000+0000 |
|  B | 0.67    | 2023-03-01T17:35:00.000+0000 |"""

你需要做的是:
用换行符拆分表格

rows = table.splitlines()

然后遍历表中的行,并按|,取第三位的项,然后将其转换为float

[
    [
        float(row_A.split("|")[2].strip()), 
        float(row_B.split("|")[2].strip())
    ]
    for row_A, row_B in zip(rows[2::2],rows[3::2])
]
soat7uwm

soat7uwm2#

一旦你有了一个简单列表中的值,你就可以使用迭代器和zip函数将它们分成两组:

values = [0.25, 0.34, 0.30, 0.54, 0.32, 0.67]
grouped = [*map(list,zip(*[iter(values)]*2))]

print(grouped)
[[0.25, 0.34], [0.3, 0.54], [0.32, 0.67]]

你也可以使用subscripting来做到这一点:

grouped = [ values[i:i+2] for i in range(0,len(values),2) ]

或zip跨步下标步进2并偏移1:

grouped = [ list(t) for t in zip(values[::2],values[1::2]) ]

相关问题