Apache spark pyspark在pyspark数据帧上复制一列

Apache spark pyspark在pyspark数据帧上复制一列,apache-spark,pyspark,Apache Spark,Pyspark,在Scala中,我可以简单地在DF中复制一列,如下所示: val df = spark.read.format("csv") .option("sep", ",") .option("inferSchema", "true") .option("header", "true") .option("samplingRatio&

在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()
如何使用withColumn在pyspark中进行此简单复制

似乎什么都不起作用,所有的职位也不起作用。奇怪的是,一定是遗漏了什么,但正如前面所说的,所有的帖子都不能在数据库上工作

错误消息:

org.apache.spark.sql.AnalysisException: cannot resolve '`age`' given input columns: [ glucose, pregnancies,  insulin,  outcome,  BMI,  age,  diabetesPF,  skinThickness,  bloodPressure];;
对于pyspark(根据我已经尝试过的答案):

看起来很像:

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

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

请检查架构并按如下方式使用它

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

相反,请检查
ignoreLeadingWhiteSpace
ignoreTrailingWhiteSpace
也跳过前导和尾随空格。

为了省去一些麻烦,您可以在读取csv文件时指定
ignoreLeadingWhiteSpace
ignoreTrailingWhiteSpace
,这将从标题和内容中删除所有前导/尾随空格

e、 g

df = df.withColumn('age2', F.col(' age'))
df.show()
df = spark.read.csv(
    'file.csv',
    header=True,
    inferSchema=True,
    ignoreLeadingWhiteSpace=True,
    ignoreTrailingWhiteSpace=True
)