当前位置: 首页 > 知识库问答 >
问题:

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

司雅畅
2023-03-14

spark的新成员...如何使用spark数据集中的列ask键获取一些值并将这些值作为新列添加到数据集中?

在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个答案

鞠隐水
2023-03-14
  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|
+---+---+------+
 类似资料:
  • 问题内容: 使用Python 2.7。我有一本字典,其中以球队名称为键,对每支球队得分并允许的奔跑次数作为值列表: 我希望能够将字典输入一个函数并遍历每个团队(键)。 这是我正在使用的代码。现在,我只能逐队参加。我将如何遍历每个团队并为每个团队打印预期的win_percentage? 谢谢你的帮助。 问题答案: 您有几种选择可以遍历字典。 如果迭代字典本身(),则将迭代字典的键。当使用for循环进

  • 问题内容: Swift中的数组支持+ =运算符,可将一个数组的内容添加到另一个数组。有没有简单的方法可以做到这一点的字典? 例如: 问题答案: 您可以为定义运算符,例如

  • 问题内容: 我收到一个字典作为输入,并想返回一个字典,其键将是输入的值,而其值将是对应的输入键。价值观是独一无二的。 例如,说我的输入是: 我希望我的输出是: 为了澄清,我希望我的结果等于以下内容: 有什么精巧的Pythonic方式可以做到这一点? 问题答案: Python 2: Python 3(感谢@erik):

  • 问题内容: 有这个Python代码 我也尝试了itervalues,iterkeys …,但是那不起作用如何修改代码? 问题答案: 您正在使用Python 3;使用代替。 Python 2方法已在Python 3中重命名,该方法现在默认返回字典视图而不是列表。字典视图的可迭代性与Python 2中的可迭代性相同。 来自Python 3新增功能文档: * 方法,然后返回“视图”而不是列表。例如,它不

  • 问题内容: 让我们考虑这个例子: 假设我们需要字典的键(水果和蔬菜)是部分的数量,加上它们将是这些部分的标题。键的项目(例如苹果和香蕉)将是每个部分的行。如何在我的代码中实现呢?我知道这可能很容易,但我无法弄清楚自己的自我。 问题答案: 您可以使用struct,这是示例:

  • 问题内容: 我有一本代表书店的字典。键代表书名,值代表当前书的份数。从商店出售书籍时,书籍的份数必须减少。 我已经编写了减少售书数量的代码,但是在更新后打印字典时,我得到的是初始字典,而不是更新的字典。 我想以最简单的方式解决问题。我是否错过了代码中的任何逻辑或任何行? 问题答案: 好吧,您可以仅通过引用键直接从值中减去。我认为这更简单。 在您的情况下: