我先打电话来 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如何处理列转换的内容。
我注意到当我打电话给 df.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
2条答案
按热度按时间whitzsjs1#
我认为这里的问题是对f.lit的调用,它创建了一个文本。
这将为每列生成一个sha值。
如果需要所有列,则需要将所有列传递给sha,因为它需要col*个参数。
编辑:注解的最后一位不正确,只有f.hash将多列作为参数,md5、crc、sha仅取1,很抱歉造成混淆。
brccelvz2#
这里不需要灯光
尝试