【问题标题】:How to refer to columns containing f-strings in a Pyspark function?如何在 Pyspark 函数中引用包含 f 字符串的列?
【发布时间】:2021-05-04 16:55:13
【问题描述】:

我正在为 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_dayslist_of_dates)中提取第一个值并执行日期计算以创建一个新变量(actual_date)。

我想在一个函数中执行此操作,这样我就不必根据我拥有的后缀数量执行两次(或更多)相同的一组操作?

但是 f 字符串给出了错误col should be Column

对此的任何帮助将不胜感激!

【问题讨论】:

    标签: pyspark apache-spark-sql f-string


    【解决方案1】:

    您需要用 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],
            )
        )
    

    【讨论】:

    • hmm 不幸的是我现在收到一个错误cannot resolve sdf.list_of_days_suffix given in put columns list_of_days_suffix
    • 如果我的回答有帮助,我们将不胜感激!
    猜你喜欢
    • 1970-01-01
    • 2021-11-23
    • 2017-10-27
    • 2011-03-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多