【问题标题】:PySpark - Format String using Column ValuesPySpark - 使用列值格式化字符串
【发布时间】:2021-11-10 15:10:01
【问题描述】:

我正在尝试创建一个使用 4 列创建字符串的新列。

df.withColumn("input",
                    F.lit("http://address.com/process?field1={}&field2={}&field3={}&field4={}".format(F.col('field1'),F.col('field2'),F.col('field3'),F.col('field4'))).show()

但是,当我尝试将列值插入字符串时,它显示为 field1=Column<'field1'> 而不是实际值。我也尝试将其包装在 F.format_string 中,但我没有得到实际值。

所以它应该返回的是这样的,假设每一列都有一个string = VALUE

http://address.com/process?field1=VALUE&field2=VALUE&field3=VALUE&field4=VALUE

【问题讨论】:

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


    【解决方案1】:

    你可以像这样使用format_string函数:

    import pyspark.sql.functions as F
    
    df = df.withColumn(
        "input",
        F.format_string(
            "http://address.com/process?field1=%s&field2=%s&field3=%s&field4=%s",
            F.col('field1'), F.col('field2'), F.col('field3'), F.col('field4')
        )
    )
    
    df.show(truncate=False)
    
    #+------+------+------+------+--------------------------------------------------------------+
    #|field1|field2|field3|field4|input                                                         |
    #+------+------+------+------+--------------------------------------------------------------+
    #|a     |b     |c     |d     |http://address.com/process?field1=a&field2=b&field3=c&field4=d|
    #+------+------+------+------+--------------------------------------------------------------+
    

    【讨论】:

    • 这很干净,谢谢!
    【解决方案2】:

    你应该使用concat,而不是lit,所以像F.concat(F.lit('http://example.com/'), F.col('field1'), F.lit('/'), F.col('field2'))这样的东西

    【讨论】:

      猜你喜欢
      • 2017-11-09
      • 1970-01-01
      • 2020-08-30
      • 1970-01-01
      • 2022-10-01
      • 2017-11-03
      • 2022-07-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多