我正在尝试根据正则表达式和条件将复杂的文本字段转换为2000个可能的值之一。
示例:如果VAL1位于('3025','4817')中,然后重新匹配('foo',VAL2),则具有(123,“ GROUP_ABX”) elif ...(重复约2000种独特的情况)
我把这一系列条件放入了一个庞大的pySpark UDF函数中。问题是,如果我有数百个以上的条件,性能就会停下来。
UDF的注册方式如下:
schema = StructType([
StructField("FOO_ID", IntegerType(), False),
StructField("FOO_NAME", StringType(), False)])
spark.udf.register("FOOTagging", FOOTag, schema)
test_udf = udf(FOOTag, schema)
数据框的更新方式如下:
df1 = spark.read.csv(file)\
.toDF(*Fields)\
.select(*FieldList)\
.withColumn("FOO_TAG_STRUCT", test_udf('VAL1','VAL2'))
当我在<200个条件下运行时,我会在几秒钟内处理23k行文件。当我超过500时,它将永远存在。
似乎UDF无法处理大型功能。还有其他解决方案吗?