从大量带有正则表达式的case语句中创建pyspark列

时间:2019-01-09 01:31:17

标签: pyspark user-defined-functions pyspark-sql

我正在尝试根据正则表达式和条件将复杂的文本字段转换为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无法处理大型功能。还有其他解决方案吗?

0 个答案:

没有答案