[英]Flatten Nested schema in DataFrame, getting AnalysisException: cannot resolve column name
[英]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]
,显然没有lon
或lat
字段。 这也是非常低效的。
相反只是:
recordDF.groupBy($"lat", $"lon").agg(avg("temp"))
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.