如何解决使用 withColumn() 使用 substring() 从字符串中删除第一个字符时出现的“Column is not iterable”错误?

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

我正在尝试从数据框中的某些列中删除第一个字符

df_rotina_pro
。但我收到以下错误:

列不可迭代。

代码:

transformed_df = (
    df_rotina_pro.withColumn(
        "cprodlim", F.substring(df_rotina_pro["cprodlim"], 2, F.length(["cprodlim"]))
    )
    .withColumn(
        "col1", F.substring(df_rotina_pro["col1"], 2, F.length(df_rotina_pro["col1"]))
    )
    .withColumn(
        "col2", F.substring(df_rotina_pro["col2"], 2, F.length(df_rotina_pro["col2"]))
    )
    .withColumn(
        "col3", F.substring(df_rotina_pro["col3"], 2, F.length(df_rotina_pro["col3"]))
    )
    .withColumn(
        "col4", F.substring(df_rotina_pro["col4"], 2, F.length(df_rotina_pro["col4"]))
    )
    .withColumn(
        "col5", F.substring(df_rotina_pro["col5"], 2, F.length(df_rotina_pro["col5"]))
    )
    .withColumn(
        "col6", F.substring(df_rotina_pro["col6"], 2, F.length(df_rotina_pro["col6"]))
    )
    .withColumn(
        "col7", F.substring(df_rotina_pro["col7"], 2, F.length(df_rotina_pro["col7"]))
    )
    .withColumn(
        "col8", F.substring(df_rotina_pro["col8"], 2, F.length(df_rotina_pro["col8"]))
    )
    .withColumn(
        "col9", F.substring(df_rotina_pro["col9"], 2, F.length(df_rotina_pro["col9"]))
    )
)

请帮我解决这个问题,因为我尝试了很多其他方法,但没有一个有效。

python apache-spark pyspark apache-spark-sql aws-glue
1个回答
0
投票

你可以尝试使用下面的代码吗:

from pyspark.sql import functions as F

transformed_df = (
    df_rotina_pro
    .withColumn("cprodlim", F.expr("substring(cprodlim, 2, length(cprodlim) - 1)"))
    .withColumn("col1", F.expr("substring(col1, 2, length(col1) - 1)"))
    .withColumn("col2", F.expr("substring(col2, 2, length(col2) - 1)"))
    .withColumn("col3", F.expr("substring(col3, 2, length(col3) - 1)"))
    .withColumn("col4", F.expr("substring(col4, 2, length(col4) - 1)"))
    .withColumn("col5", F.expr("substring(col5, 2, length(col5) - 1)"))
    .withColumn("col6", F.expr("substring(col6, 2, length(col6) - 1)"))
    .withColumn("col7", F.expr("substring(col7, 2, length(col7) - 1)"))
    .withColumn("col8", F.expr("substring(col8, 2, length(col8) - 1)"))
    .withColumn("col9", F.expr("substring(col9, 2, length(col9) - 1)"))
)

F.expr 用于直接将 SQL 表达式传递到 PySpark 列。

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