如何将字典键应用于Spark中数据集中的列中值



spark上的newbie ...我如何在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返回使用新列values和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|
+---+---+------+

最新更新