【问题标题】:Equivalent code from python apply function to Pyspark code using udf使用 udf 从 python 应用函数到 Pyspark 代码的等效代码
【发布时间】:2021-08-24 14:24:36
【问题描述】:
df = spark.createDataFrame(
        [
            (1, "AxtTR"),  # create your data here, be consistent in the types.
            (2, "HdyOP"),
            (3, "EqoPIC"),
            (4, "OkTEic"),
        ], ["id", "label"] )# add your column names here]
df.show()

下面的代码在 python 中,我使用 apply 函数并尝试提取每行的前 2 个字母。我想在 pyspark 中复制相同的代码。其中一个函数用于对每一行应用并获取输出。

def get_string(lst):    
    lst = str(lst)
    lst = lst.lower
    lst=  lst[0:2]
    return(lst)
df['firt_2letter'] = df['label'].apply(get_string)

如下图所示的黄色标记是预期的输出。

【问题讨论】:

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


    【解决方案1】:

    您可以使用相关的 Spark SQL 函数:

    import pyspark.sql.functions as F
    
    df2 = df.withColumn('first_2letter', F.lower('label')[0:2])
    
    df2.show()
    +---+------+-------------+
    | id| label|first_2letter|
    +---+------+-------------+
    |  1| AxtTR|           ax|
    |  2| HdyOP|           hd|
    |  3|EqoPIC|           eq|
    |  4|OkTEic|           ok|
    +---+------+-------------+
    

    如果要使用用户自定义函数,可以定义为:

    def get_string(lst):    
        lst = str(lst)
        lst = lst.lower()
        lst = lst[0:2]
        return lst
    
    import pyspark.sql.functions as F
    
    df2 = df.withColumn('first_2letter', F.udf(get_string)('label'))
    
    df2.show()
    +---+------+-------------+
    | id| label|first_2letter|
    +---+------+-------------+
    |  1| AxtTR|           ax|
    |  2| HdyOP|           hd|
    |  3|EqoPIC|           eq|
    |  4|OkTEic|           ok|
    +---+------+-------------+
    

    【讨论】:

    • 谢谢,只是想知道这是一个简单的功能。如果有自定义我们如何在 pyspark 中调用该函数
    • 一个查询,如果我们传递两列 def get_string(vec): lst = vec[0];lst1 = vec[1] lst = str(lst) lst = lst.lower () lst = lst[0:2] return lst ,在最简单的情况下 df.withColumn('first_2letter', F.udf(get_string)(['col1','col2']))。这是正确的方法吗?
    • 然后再向函数添加一个参数
    猜你喜欢
    • 2023-04-05
    • 2014-09-02
    • 2014-03-21
    • 2021-11-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多