pyspark 如何在文件上运行字典

ktca8awb  于 5个月前  发布在  Spark
关注(0)|答案(1)|浏览(50)

我有这样的数据集
| RespID|年龄|GEO| Gen| PROD| BRND| Q1| Q2| Q3|
| --|--|--|--|--|--|--|--|--|
| 1 | 1 | 1 | 1 | 3 | 3 | 4 | 1 | 6 |
| 2 | 1 | 2 | 2 | 2 | 1 | 1 | 4 | 9 |
| 3 | 4 | 2 | 2 | 1 | 1 | 3 | 4 | 6 |
| 4 | 1 | 1 | 2 | 3 | 2 | 7 | 4 | 3 |
| 5 | 2 | 1 | 1 | 3 | 2 | 1 | 4 | 3 |
| 6 | 1 | 1 | 2 | 2 | 3 | 2 | 4 | 2 |
| 7 | 2 | 2 | 2 | 3 | 3 | 7 | 2 | 10 |
| 8 | 4 | 2 | 1 | 1 | 1 | 4 | 2 | 6 |
| 9 | 3 | 1 | 2 | 2 | 2 | 4 | 3 | 9 |
| 10 | 1 | 2 | 1 | 1 | 1 | 7 | 7 | 7 |
对于每个数据集,我将获得另一个文件,该文件以捕获时的方式构建
x1c 0d1x的数据
问题是:有没有可能以某种方式创建一个字典或其他东西的文件,这是在捕获,然后运行在表,所以我没有geo = 1,但Ryga或其他等等?第1 - 3季度还将为我提供1-10个(目前还没有)。我只知道如何使用字典更改列的名称,但不知道如何更改值,动态的。将使用数据块,所以python和pyspark可用
非常感谢您的帮助和提示

k7fdbhmy

k7fdbhmy1#

为每个需要翻译的列创建一个case语句。
下面是两列GENGEO的示例:

from pyspark.sql import functions as F

df = <input data>

translations = [
    ('GEN', {1: 'Female', 2: 'Male'}),
    ('GEO', {1: 'Ryga', 2: 'Others'})
]

df1 = df
for translation in translations:
    stmt = f'case {translation[0]}'
    for (k,v) in translation[1].items():
      stmt = stmt + f' when {k} then "{v}"'
    stmt = stmt + ' end'
    df1 = df1.withColumn(translation[0], F.expr(stmt))

df1.show()

字符串
输出量:

+------+---+------+------+----+----+---+---+---+
|RespID|AGE|   GEO|   GEN|PROD|BRND| Q1| Q2| Q3|
+------+---+------+------+----+----+---+---+---+
|     1|  1|  Ryga|Female|   3|   3|  4|  1|  6|
|     2|  1|Others|  Male|   2|   1|  1|  4|  9|
|     3|  4|Others|  Male|   1|   1|  3|  4|  6|
|     4|  1|  Ryga|  Male|   3|   2|  7|  4|  3|
|     5|  2|  Ryga|Female|   3|   2|  1|  4|  3|
|     6|  1|  Ryga|  Male|   2|   3|  2|  4|  2|
|     7|  2|Others|  Male|   3|   3|  7|  2| 10|
|     8|  4|Others|Female|   1|   1|  4|  2|  6|
|     9|  3|  Ryga|  Male|   2|   2|  4|  3|  9|
|    10|  1|Others|Female|   1|   1|  7|  7|  7|
+------+---+------+------+----+----+---+---+---+


翻译列表可以根据需要扩展到其他列。

相关问题