【问题标题】:pyspark duplicate a column on pyspark data framepyspark 在 pyspark 数据框上复制一列
【发布时间】:2023-03-31 07:58:01
【问题描述】:

在 Scala 中,我可以像这样简单地复制 DF 中的一列:

val df = 
   spark.read.format("csv")
  .option("sep", ",")
  .option("inferSchema", "true")
  .option("header", "true")
  .option("samplingRatio", "1.0")
  .load("/FileStore/tables/diabetesPIMA.dat")

df.show(false)
val df2 = df.withColumn("age2", $"age")
df2.show()

如何在 pyspark 中使用 withColumn 进行这个简单的复制?

似乎没有任何效果,所有帖子也不起作用。奇怪,一定是遗漏了什么,但如前所述,所有帖子都不适用于 Databricks。

错误信息:

org.apache.spark.sql.AnalysisException: cannot resolve '`age`' given input columns: [ glucose, pregnancies,  insulin,  outcome,  BMI,  age,  diabetesPF,  skinThickness,  bloodPressure];;

for in pyspark(根据我已经尝试过的答案):

df = df.withColumn('age2', F.col('age'))
df.show()

看起来非常相似:

df = df.withColumn('col3', F.col('col2'))

【问题讨论】:

    标签: apache-spark pyspark


    【解决方案1】:

    看起来您的列名中可能有一个额外的空格,而不是 age 您有 age

    请检查架构并如下使用它

    df = df.withColumn('age2', F.col(' age'))
    df.show()
    

    相反,请检查ignoreLeadingWhiteSpaceignoreTrailingWhiteSpace 是否也跳过前导和尾随空格。

    【讨论】:

      【解决方案2】:

      为了省点麻烦,您可以在读取 csv 文件时指定 ignoreLeadingWhiteSpaceignoreTrailingWhiteSpace,这将去除标题和内容中的所有前导/尾随空格。

      例如

      df = spark.read.csv(
          'file.csv',
          header=True,
          inferSchema=True,
          ignoreLeadingWhiteSpace=True,
          ignoreTrailingWhiteSpace=True
      )
      

      【讨论】:

        猜你喜欢
        • 2018-10-28
        • 2020-11-22
        • 1970-01-01
        • 1970-01-01
        • 2020-09-26
        • 1970-01-01
        • 2017-06-13
        • 2018-10-05
        • 2018-11-10
        相关资源
        最近更新 更多