首页 > 解决方案 > Pyspark - 如何在转换后将列传递给函数?

问题描述

首先,我错误地调用sha2了函数pyspark.sql.functions,将一列 DoubleType 传递给它并得到以下错误:

cannot resolve 'sha2(`metric`, 256)' due to data type mismatch: argument 1 requires binary type, however, '`metric`' is of double type

然后我尝试首先将列转换为 StringType 但仍然遇到相同的错误。我可能会错过一些关于 Spark 如何处理列转换的内容。

我注意到,当我只调用 adf.withColumn(col_name, F.lit(df[col_name].cast(StringType())))而不调用.withColumn(col_name, F.sha2(df[col_name], 256))列时,类型会更改为 StringType。

在这种情况下,我应该如何正确应用转换?

def parse_to_sha2(df: DataFrame, cols: list):
    for col_name in cols:
        df = df.withColumn(col_name, F.lit(df[col_name].cast(StringType()))) \
               .withColumn(col_name, F.sha2(df[col_name], 256))
    return df

标签: apache-sparkpyspark

解决方案


你不需要在这里点亮

尝试

.withColumn(col_name, F.sha2(df[col_name].cast('string'), 256))

推荐阅读