col("name") 与直接在 pyspark pandas udf 函数列名称中使用名称之间有区别吗?

问题描述 投票:0回答:1

当将输入传递到 pyspark 中的 pandas_udf 时,您使用 col(“name”),有时您直接使用“name”。有区别吗?另外,有人可以指出文档中允许引用这两种用法的确切行吗?我知道这两种方法都有效,但我很难说服自己,因此需要搜索相应的文档。

谢谢你

(从 databricks 教程之一中提取的示例)

from pyspark.sql.functions import pandas_udf

@pandas_udf("double")
def predict(*args: pd.Series) -> pd.Series:
    model_path = f"runs:/{run.info.run_id}/model" 
    model = mlflow.sklearn.load_model(model_path) # Load model
    pdf = pd.concat(args, axis=1)
    return pd.Series(model.predict(pdf))

prediction_df = spark_df.withColumn("prediction", predict(spark_df.columns))
display(prediction_df)
pyspark
1个回答
0
投票

考虑这个功能:

def my_function(A, B, C): 
   ....

在Python中,无论变量A、B或C的值如何,函数都会被执行。如果输入对象与预期类型不匹配,它可能会遇到失败,但无论如何都会调用函数本身。

在 Spark 的底层语言 Scala 中,具有相同名称的函数,如下所示:

def add(x: Int, y: Int): Int = x + y
def add(x: Double, y: Double): Double = x + y

作为不同的功能同时存在。使用 Spark 函数时,您实际上是在调用 Scala 函数。有些是用“字符串”作为输入(代表列名称)来定义的,而另一些是用“列”对象作为输入来定义的(

F.col("col_name")
)。在大多数情况下,两个版本都已定义,允许您互换使用其中一个,因为它们在功能上是相同的。

function("column_name")
形式是为非开发人员,特别是数据科学家而设计的。 另一方面,
function(col("column_name"))
更面向对象,面向开发人员。

© www.soinside.com 2019 - 2024. All rights reserved.