Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Pyspark:如何仅对具有NotNull值的行应用UDF_Python_Apache Spark_Pyspark_Apache Spark Sql - Fatal编程技术网

Python Pyspark:如何仅对具有NotNull值的行应用UDF

Python Pyspark:如何仅对具有NotNull值的行应用UDF,python,apache-spark,pyspark,apache-spark-sql,Python,Apache Spark,Pyspark,Apache Spark Sql,我有一个pyspark数据框架,希望对具有空值的列应用UDF 下面是我的数据框: +----+----+ | a| b| +----+----+ |null| 00| |.Abc|null| |/5ee| 11| |null| 0| +----+----+ 下面是所需的数据帧(如果行值不为空,请删除标点并将列a中的字符串值更改为大写): 以下是我的自定义项和代码: import pyspark.sql.functions as F import re remove_punct

我有一个pyspark数据框架,希望对具有空值的列应用UDF

下面是我的数据框:

+----+----+
|   a|   b|
+----+----+
|null|  00|
|.Abc|null|
|/5ee|  11|
|null|   0|
+----+----+
下面是所需的数据帧(如果行值不为空,请删除标点并将列a中的字符串值更改为大写):

以下是我的自定义项和代码:

import pyspark.sql.functions as F
import re

remove_punct = F.udf(lambda x: re.sub('[^\w\s]', '', x))
df = df.withColumn('a', F.when(F.col("a").isNotNull(), F.upper(remove_punct(F.col("a")))))
以下是错误:

TypeError: expected string or bytes-like object
您能建议什么是获得所需DF的最佳解决方案吗


提前谢谢

使用regexp\u替换。不需要自定义项

df = df.withColumn('a', F.upper(F.regexp_replace(F.col('a'), '[^\w\s]', '')))
如果坚持使用UDF,则需要执行以下操作:

remove_punct = F.udf(lambda x: re.sub('[^\w\s]', '', x) if x is not None else None)
df = df.withColumn('a', F.upper(remove_punct(F.col("a"))))
remove_punct = F.udf(lambda x: re.sub('[^\w\s]', '', x) if x is not None else None)
df = df.withColumn('a', F.upper(remove_punct(F.col("a"))))