我正在寻找一种方法来转换给定的数据列,在本例中为字符串,并将它们转换为数字表示形式。例如,我有一个包含值的字符串的 Dataframe :
+------------+
| level |
+------------+
| Medium|
| Medium|
| Medium|
| High|
| Medium|
| Medium|
| Low|
| Low|
| High|
| Low|
| Low|
我想创建一个新列,在其中将这些值转换为:
"High"= 1, "Medium" = 2, "Low" = 3
+------------+
| level_num|
+------------+
| 2|
| 2|
| 2|
| 1|
| 2|
| 2|
| 3|
| 3|
| 1|
| 3|
| 3|
我尝试定义一个函数并对 Dataframe 执行Foreach操作,如下所示:
def f(x):
if(x == 'Medium'):
return 2
elif(x == "Low"):
return 3
else:
return 1
a = df.select("level").rdd.foreach(f)
但这将返回一个“None”类型。有什么想法吗?一如既往的感谢你的帮助!
2条答案
按热度按时间zzlelutf1#
您当然可以按照您一直尝试的方法来完成--您将需要一个
map
操作,而不是foreach
。使用您的
f(x)
和这些玩具数据,我们可以获得:再来一张
map
就会给你一个 Dataframe :但最好不要调用临时中间RDD,而是使用 Dataframe 函数
when
而不是f(x)
:pkmbmrz72#
另一种方法是使用内置的Python词典来表示Spark>=2.4的Map。
然后使用Spark map和map_from_arrares实现基于键的搜索机制,以填充
level_num
字段: