【问题标题】:How to use regex within pandas_udf function in pyspark?如何在pyspark中使用正则表达式和pandas udf函数?
【发布时间】:2021-08-08 18:24:53
【问题描述】:

我的代码如下:

@pandas_udf(BooleanType())
def is_one(iterator: Iterator[pd.Series]) -> Iterator[pd.Series]:
    for s in iterator:
        res = re.search("1", s)
        yield res != None

df = spark.createDataFrame(pd.DataFrame(["1", "2", "3"], columns=["v"]))
df.select(is_one(df.v)).show()

我收到错误:

TypeError:预期的字符串或类似字节的对象

看起来我的函数没有遍历字符串。这是为什么?我如何在 pandas_udf 中使用正则表达式函数?

我尝试了系列到系列的方法,但得到了同样的错误。

【问题讨论】:

    标签: python pandas apache-spark pyspark user-defined-functions


    【解决方案1】:

    您可以在该系列中使用apply 来应用您的正则表达式搜索:

    from pyspark.sql.functions import pandas_udf
    from pyspark.sql.types import BooleanType
    import pandas as pd
    
    @pandas_udf(BooleanType())
    def is_one(ser: pd.Series) -> pd.Series:
        return ser.apply(lambda s: re.search("1", s) is not None)
        # a neater way:
        # return ser.str.contains("1")
    
    df = spark.createDataFrame(pd.DataFrame(["1", "2", "3"], columns=["v"]))
    
    df.select(is_one(df.v)).show()
    +---------+
    |is_one(v)|
    +---------+
    |     true|
    |    false|
    |    false|
    +---------+
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-01-24
      • 2018-04-24
      • 1970-01-01
      • 1970-01-01
      • 2017-09-05
      • 2019-02-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多