【发布时间】:2018-01-24 13:56:27
【问题描述】:
val rdd = sc.parallelize(Seq(("vskp", Array(2.0, 1.0, 2.1, 5.4)),("hyd",Array(1.5, 0.5, 0.9, 3.7)),("hyd", Array(1.5, 0.5, 0.9, 3.2)),("tvm", Array(8.0, 2.9, 9.1, 2.5))))
val df1= rdd.toDF("id", "vals")
val rdd1 = sc.parallelize(Seq(("vskp","ap"),("hyd","tel"),("bglr","kkt")))
val df2 = rdd1.toDF("id", "state")
val df3 = df1.join(df2,df1("id")===df2("id"),"left")
连接操作工作正常 但是当我重用 df2 时,我面临未解决的属性错误
val rdd2 = sc.parallelize(Seq(("vskp", "Y"),("hyd", "N"),("hyd", "N"),("tvm", "Y")))
val df4 = rdd2.toDF("id","existance")
val df5 = df4.join(df2,df4("id")===df2("id"),"left")
错误:org.apache.spark.sql.AnalysisException:已解析的属性 ID#426
【问题讨论】:
-
这很可能与issues.apache.org/jira/browse/SPARK-10925有关,即id列的命名不明确
-
但在第一种情况下它工作正常。我也提到了参考。我尝试将 df4 中的 id 重命名为 id_new。仍然无法解决错误。是因为 JAVARDD 的一些血统问题吗?我试着保留检查站。但还是同样的错误
-
另见:stackoverflow.com/questions/40062298/… - 完整的错误消息是“已解决的属性缺失...”
-
这可能是有史以来最糟糕/最骇人听闻的修复,但对数据帧进行别名化,即
df_alias = df.alias('df_alias)并颠倒连接顺序,即将df1_alias.join(df2_alias . . .)更改为df2_alias.join(df1_ailas . . .)为我解决了这个问题跨度>
标签: java scala spark-dataframe