Apache spark 使用字典创建一个函数,将列从字符串更改为整数
我完全是个新手。我有一个RDD,它的列包含{'Fair','Good','Better','Best'}字符串,我想创建一个函数,使用字典将这些字符串更改为{1,2,3,4}。这是我到目前为止所做的,但它不起作用,它返回字符串对象时没有items属性。我使用的是RDD,而不是熊猫数据帧。我需要的功能,能够使用自定义项来更改原始数据帧。该功能之后将显示 spark.udf.register(,) 这项工作:Apache spark 使用字典创建一个函数,将列从字符串更改为整数,apache-spark,user-defined-functions,Apache Spark,User Defined Functions,我完全是个新手。我有一个RDD,它的列包含{'Fair','Good','Better','Best'}字符串,我想创建一个函数,使用字典将这些字符串更改为{1,2,3,4}。这是我到目前为止所做的,但它不起作用,它返回字符串对象时没有items属性。我使用的是RDD,而不是熊猫数据帧。我需要的功能,能够使用自定义项来更改原始数据帧。该功能之后将显示 spark.udf.register(,) 这项工作: def rank(n): if n == "Fair":
def rank(n):
if n == "Fair":
return 1
elif n == "Good":
return 2
elif n == "Better":
return 3
elif n == "Best":
return 4
else:
return n
spark.udf.register('RANK(rank), rank)
但是我想要一个更简单的公式。从pyspark.sql.functions导入col,创建映射,点亮
来自itertools进口链
mapping_expr=create_map([lit(x)表示链中的x(*mapping.items())]))
df.withColumn(“新列”,映射表达式getItem(col(“旧列”))
其中,
映射
是您的dict-不要称它为列表
,Python中的列表类已经使用了这个名称。您可以分享一个小示例输入数据来测试潜在代码,以及您的预期输出吗。我有一个RDD,它有三列:名称、排名和价格。“排名”列包含“公平”、“良好”、“更好”和“最佳”字符串。我想让它们变成一列从1到4的整数。我将使用UDF中的函数来更改列。这有意义吗?您使用的是数据帧还是RDD转换?这会大大改变意思。在任何情况下,您能否将rdd的这一细节与问题中的示例值共享?参考或这是否有帮助?如果您使用数据帧(spark也有数据帧,并非所有数据帧都是pandas数据帧!),那么您可以轻松实现pandas\u udf()
。函数应该返回一个值(秩值),并且应该能够接受秩(来自秩字段的值)。因此,函数采用字符秩并返回整数秩-基本流。顺便说一句,您的问题似乎暗示您希望使用RDD
,而不是spark数据帧。
def rank(n):
b = {"Fair": 1, "Good": 2, "Better": 3, "Best": 4}
rep = {v : k for k, v in b.items()}
return rep
spark.udf.register('RANK', rank)
df.select(
'*',
expr('RANK(Rank)')).show(5)
def rank(n):
if n == "Fair":
return 1
elif n == "Good":
return 2
elif n == "Better":
return 3
elif n == "Best":
return 4
else:
return n
spark.udf.register('RANK(rank), rank)