gpt4 book ai didi

java - 如何将字典键值项目应用到spark数据集中的列?

转载 作者:行者123 更新时间:2023-12-02 12:17:05 25 4
gpt4 key购买 nike

Spark 新手...我如何使用 Spark 数据集中的列询问键来获取一些值并将这些值作为新列添加到数据集中?

在Python中,我们有这样的东西:

 df.loc[:,'values'] = df.loc[:,'key'].apply(lambda x: D.get(x))

其中 D 是之前定义的 python 函数。

如何使用 Java 在 Spark 中执行此操作?谢谢。

编辑:例如: 我有以下数据集 df:

A
1
3
6
0
8

我想根据以下字典创建工作日列:

D[1] = "Monday"
D[2] = "Tuesday"
D[3] = "Wednesday"
D[4] = "Thursday"
D[5] = "Friday"
D[6] = "Saturday"
D[7] = "Sunday"

并将该列添加回我的数据集 df:

A    days
1 Monday
3 Wednesday
6 Saturday
0 Sunday
8 NULL

这只是一个示例,A 列当然可以是整数以外的任何值。

最佳答案

  1. 您可以使用 df.withColumn 返回一个新的 df,其中包含新列 和 df 的先前值。
  2. 创建一个udf函数(用户定义函数)来应用字典映射。
<小时/>

这是一个可重现的示例:

>>> from pyspark.sql.types import StringType 
>>> from pyspark.sql.functions import udf
>>> df = spark.createDataFrame([{'A':1,'B':5},{'A':5,'B':2},{'A':1,'B':3},{'A':5,'B':4}], ['A','B'])
>>> df.show()
+---+---+
| A| B|
+---+---+
| 1| 5|
| 5| 2|
| 1| 3|
| 5| 4|
+---+---+

>>> d = {1:'x', 2:'y', 3:'w', 4:'t', 5:'z'}
>>> mapping_func = lambda x: d.get(x)
>>> df = df.withColumn('values',udf(mapping_func, StringType())("A"))
>>> df.show()
+---+---+------+
| A| B|values|
+---+---+------+
| 1| 5| x|
| 5| 2| z|
| 1| 3| x|
| 5| 4| z|
+---+---+------+

关于java - 如何将字典键值项目应用到spark数据集中的列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46095910/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com