如何在 Pyspark 函数中引用包含 f 字符串的列?
How to refer to columns containing f-strings in a Pyspark function?
我正在为 Spark DF 编写一个函数,该函数对列执行操作并给它们一个后缀,这样我就可以 运行 对两个不同的后缀执行两次函数,然后再加入它们。
我有 时间 找出引用它们的最佳方式,但是在这段特定的代码中,我想知道我遗漏了什么?
def calc_date(sdf, suffix):
final_sdf = (
sdf.withColumn(
f"lowest_days{suffix}",
f"sdf.list_of_days_{suffix}"[0],
)
.withColumn(
f"earliest_date_{suffix}",
f"sdf.list_of_dates_{suffix}"[0],
)
.withColumn(
f"actual_date_{suffix}",
spark_fns.expr(
f"date_sub(earliest_date_{suffix}, lowest_days{suffix})"
),
)
)
在这里,我试图从两个列表(list_of_days
和 list_of_dates
)中提取第一个值并执行日期计算以创建一个新变量(actual_date
)。
我想在一个函数中执行此操作,这样我就不必根据我拥有的后缀数量对同一组操作执行两次(或更多次)?
但是 f-strings 给出了一个错误 col should be Column
。
如有任何帮助,我们将不胜感激!
您需要用 col() 包装第二个参数。
from pyspark.sql.functions import *
def calc_date(sdf, suffix):
final_sdf = (
sdf.withColumn(
f"lowest_days{suffix}",
col(f"list_of_days_{suffix}")[0],
)
.withColumn(
f"earliest_date_{suffix}",
col(f"list_of_dates_{suffix}")[0],
)
)
我正在为 Spark DF 编写一个函数,该函数对列执行操作并给它们一个后缀,这样我就可以 运行 对两个不同的后缀执行两次函数,然后再加入它们。
我有 时间 找出引用它们的最佳方式,但是在这段特定的代码中,我想知道我遗漏了什么?
def calc_date(sdf, suffix):
final_sdf = (
sdf.withColumn(
f"lowest_days{suffix}",
f"sdf.list_of_days_{suffix}"[0],
)
.withColumn(
f"earliest_date_{suffix}",
f"sdf.list_of_dates_{suffix}"[0],
)
.withColumn(
f"actual_date_{suffix}",
spark_fns.expr(
f"date_sub(earliest_date_{suffix}, lowest_days{suffix})"
),
)
)
在这里,我试图从两个列表(list_of_days
和 list_of_dates
)中提取第一个值并执行日期计算以创建一个新变量(actual_date
)。
我想在一个函数中执行此操作,这样我就不必根据我拥有的后缀数量对同一组操作执行两次(或更多次)?
但是 f-strings 给出了一个错误 col should be Column
。
如有任何帮助,我们将不胜感激!
您需要用 col() 包装第二个参数。
from pyspark.sql.functions import *
def calc_date(sdf, suffix):
final_sdf = (
sdf.withColumn(
f"lowest_days{suffix}",
col(f"list_of_days_{suffix}")[0],
)
.withColumn(
f"earliest_date_{suffix}",
col(f"list_of_dates_{suffix}")[0],
)
)