gpt4 book ai didi

python - 如何同时使用 substring 和 instr pyspark

转载 作者:行者123 更新时间:2023-12-01 06:45:29 25 4
gpt4 key购买 nike

我试图同时使用 substring 和 instr 函数来提取子字符串,但无法这样做。我尝试使用 pyspark native 函数和 udf ,但收到错误“列不可迭代”。你能帮忙吗

from pyspark.sql.functions import *
from pyspark.sql.functions import UserDefinedFunction
from pyspark.sql.types import *

data = [
{"chargedate":"2019-01-30"},
{"chargedate":"2019-02-28"},
{"chargedate":"2019-03-30"},
{"chargedate":"2019-04-29"}
]
df = spark.createDataFrame(data)
udf = UserDefinedFunction(lambda x : x.find("01",1),IntegerType())
##1st way
##df.withColumn("Chargemonth",substring(df.chargedate,1,instr(col("chargedate"),'01'))).show()
##2nd way with udf
df.withColumn("Chargemonth",substring(df.chargedate,1,udf(col("chargedate")))).show()

enter image description here

最佳答案

您正在尝试使用函数 substring这需要(Column, int, int)但你通过了(Column, int, Column)这就是为什么你会收到错误:

Column is not iterable

正如我在评论中所说,如果您只需要从日期中提取月份,您最好使用内置函数 date_format 。当你可以避免 UDF 时就这样做。

对于您关于如何使用substring ( string , 1 , charindex (search expression, string ))的问题就像在 SQL Server 中一样,您可以按如下方式执行此操作:

df.withColumn("Chargemonth", col("chargedate").substr(lit(1), instr(col("chargedate"), '01'))).show()

使用列函数 substr

注意: instr将返回出现的第一个索引,也许这不是您想要的。

关于python - 如何同时使用 substring 和 instr pyspark,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59238807/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com