繁体   English   中英

AnalysisException:无法解析(_1,_2,_3)中的列名“XYZ”

[英]AnalysisException: Cannot resolve column name “XYZ” among (_1,_2,_3)

在下面的方法中,我尝试对输入Iterable进行一些聚合操作,并输出不同的Iterable对。 为此,我创建了一个RDD,定义了模式,然后从RDD创建了DataFrame。

//Create a Row RDD
    val recordRDD = sc.makeRDD(tuples.toSeq).map(locTempRow)

    //Create the Schema for the DataFrame
    val schema = StructType(List(
      StructField("lat", DoubleType, nullable = true), //Latitude
      StructField("lon", DoubleType, nullable = true), //Longitude
      StructField("temp", DoubleType, nullable = true)))//Temperature

    //Create the DataFrame
    val recordDF = spark.createDataFrame(recordRDD, schema) 

然后我在纬度和经度上分组以获得平均温度

//From DataFrame to group by lat and lon and avg on temp
    recordDF.map(r => (r.getAs[Double]("lat"),
                       r.getAs[Double]("lon"),
                       r.getAs[Double]("temp")
                       )).groupBy($"lat", $"lon").agg(avg("temp")).
                       rdd.map(agg => (Location(agg.getAs[Double]("lat"), agg.getAs[Double]("lon")), agg.getAs[Double]("temp"))).collect()

我得到这个例外:

org.apache.spark.sql.AnalysisException: Cannot resolve column name "lat" among (_1, _2, _3);

我尝试在列字符串文字之前添加$,从所有这些文件中删除$,但错误仍然相同。

printSchema()正确显示:

root
 |-- lat: double (nullable = true)
 |-- lon: double (nullable = true)
 |-- temp: double (nullable = true)

问题在哪里,当我可以清楚地看到有lat,lon和temp列为什么在groupBy调用时,它失败了?

问题是map功能。 您将数据转换为Tuple3[Double, Double, Double] ,显然没有lonlat字段。 这也是非常低效的。

相反只是:

recordDF.groupBy($"lat", $"lon").agg(avg("temp"))

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM