在apachespark中重命名后使用java的列

j1dl9f46  于 2021-05-27  发布在  Spark
关注(0)|答案(2)|浏览(402)

我试图理解为什么spark在某些相同的场景中表现不同。我重命名了两个列,并尝试在某些计算中使用这两个列,但有一个语句抛出en error,无法找到重命名的列。下面是代码

intermediateDF = intermediateDF.drop("GEO.id")
                                       .withColumnRenamed("GEO.id2", "id")
                                       .withColumnRenamed("GEO.display-label", "label")
                                       .withColumn("stateid", functions.expr("int(id/1000)"))
                                       .withColumn("countyId", functions.expr("id%1000"))
                                       //.withColumn("countyState", functions.split(intermediateDF.col("label"), ","))
                                       .withColumnRenamed("rescen42010", "real2010")
                                       .drop("resbase42010")
                                       .withColumnRenamed("respop72010", "est2010")
                                       .withColumnRenamed("respop72011", "est2011")
                                       .withColumnRenamed("respop72012", "est2012")
                                       .withColumnRenamed("respop72013", "est2013")
                                       .withColumnRenamed("respop72014", "est2014")
                                       .withColumnRenamed("respop72015", "est2015")
                                       .withColumnRenamed("respop72016", "est2016")
                                       .withColumnRenamed("respop72017", "est2017")

注解掉的行就是抛出错误的行

Exception in thread "main" org.apache.spark.sql.AnalysisException: Cannot resolve column name "label" among (GEO.id, GEO.id2, GEO.display-label, rescen42010, resbase42010, respop72010, respop72011, respop72012, respop72013, respop72014, respop72015, respop72016, respop72017);

有人能帮我理解为什么spark可以找到一个重命名的列(从 GEO.id2id ),在其上运行计算,但在其他(从geo.display-label到label)上失败。我正在使用apachespark3和java。谢谢

bjp0bcyl

bjp0bcyl1#

尝试以下语法:

.withColumn("countyState", functions.split(col("label"), ","))

它应该很好用。

798qvoo8

798qvoo82#

检查以下代码。

intermediateDF.select( \
      col("GEO.id2").alias("id"), \
      functions.expr("int(id/1000)").alias("stateid"), \
      functions.expr("id%1000").alias("countyId"), \
      split(col("GEO.display-label"),",").alias("countyState"), \
      col("rescen42010").as("real2010"), \
      col("respop72010").alias("est2010"), \
      col("respop72011").alias("est2011"), \
      col("respop72012").alias("est2012"), \
      col("respop72013").alias("est2013"), \
      col("respop72014").alias("est2014"), \
      col("respop72015").alias("est2015"), \
      col("respop72016").alias("est2016"), \
      col("respop72017").alias("est2017"))

相关问题