from pyspark.sql.functions import udf
def colToString(num):
if num >= 0 and num < 0.5: return 'A'
elif num >= 0.5 and num < 0.75: return 'B'
elif num >= 0.75 and num < 1.0: return 'C'
else: return 'D'
myUdf = udf(colToString, StringType())
df.withColumn("col10", myUdf('col9'))
您可以使用
pd.cut()
并按您想要的方式标记类别:对于用户定义函数(UDF),这是一个完美的情况。如果您需要更大的灵活性(例如,从您的输入中创建多个列),那么您可以查看transformers。在
您的自定义项如下所示:
这里,
myUdf
接受一个双精度参数并返回一个字符串。从输入列col9
读取双精度值。在关键是使用数据帧操作来执行此操作,而不是Pandas。熊猫不会以分散的方式执行您的操作,而Spark会。在
虽然使用pandas数据帧有一个很好的答案,但是既然你在标签中提到了pyspark,我想你是指spark dataframes?在
如果是这样,您可以这样做:
我假设列的合法值是0-1,但是如果需要显式地检查它们,只需更改条件并为非法值添加额外的when/other
相关问题 更多 >
编程相关推荐