我试图理解为什么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.id2
至 id
),在其上运行计算,但在其他(从geo.display-label到label)上失败。我正在使用apachespark3和java。谢谢
2条答案
按热度按时间bjp0bcyl1#
尝试以下语法:
它应该很好用。
798qvoo82#
检查以下代码。