我有一个有~100列的数组,有各种类型,包括StringType(),IntegerType(),BooleanType(),ArrayType(StringType())。这些列(包括布尔/数组类型)中很少有来自数据提供程序的垃圾值,如垃圾,NULL,默认值等。我需要用NULL替换这些值,而不是NULL字符串。
values_to_replace = ["junk", "NULL","default"]
replacement_value = None
for column in df.columns:
df = df.withColumn(column, when(col(column).isin(values_to_replace), replacement_value).otherwise(col(column)))
字符串
问题:上面的替换部分对于字符串类型很好,但是当处理非字符串数据类型的列时会出错,比如boolean/array。
无法解析“(col_name1 IN(junk,NULL,default))”,因为数据类型不匹配:in
的输入应该都是同一类型,但它是[“ARRAY”,“STRING”,“STRING”,“STRING”]。
无法解析“(col_name2 IN(junk,NULL,default))”,因为数据类型不匹配:in
的输入应该都是同一类型,但它是[“BOOLEAN”,“STRING”,“STRING”,“STRING”]。
我们如何处理所有数据库的替换?
1条答案
按热度按时间jtoj6r0c1#
如果希望使用ISIN对所有数据类型使用通用逻辑,则可以临时将非字符串列转换为字符串类型,以进行替换操作
字符串