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

Posted

技术标签:

【中文标题】如何将字典键应用于值项目到火花数据集中的列?【英文标题】:how to apply dictionary key to value project to a column in dataset in spark? 【发布时间】:2017-09-07 12:06:30 【问题描述】:

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

在python中,我们有类似的东西:

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

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

如何在 Spark 中使用 Java 做到这一点?谢谢。

编辑: 例如: 我有以下数据集 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列当然可以是整数以外的任何东西。

【问题讨论】:

我建议您也为您的问题添加一些输入和预期输出。您提供了一个 python sn-p 请求 Java 解决方案。不确定它有多大帮助。 刚刚添加了更多细节 【参考方案1】:
    您可以使用df.withColumn 返回一个新的df,其中包含新列values 和之前的df 值。 创建一个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|
+---+---+------+

【讨论】:

@user6396 你可以检查这个:***.com/questions/35348058/…

以上是关于如何将字典键应用于值项目到火花数据集中的列?的主要内容,如果未能解决你的问题,请参考以下文章

火花数据集的转换

将具有多个键的 Python 字典映射到具有多个匹配键的列的数据框中

如何将具有值的列添加到 Spark Java 中的新数据集?

将函数列表应用于值列表

将字典转换为数据框,键作为列名,键值作为数据框的列值

使用键名过滤pyspark中的字典