在使用dataframe API执行一个连接操作时,我遇到了一个问题,例如“ sql.AnalysisException:无法解析column_name ”。虽然列名存在,但是当使用HiveContext的SQL格式尝试时,相同的连接操作正常工作。在以下代码库中,
DataFrame df= df1
.join(df2, df1.col("MERCHANT").equalTo(df2.col("MERCHANT")))
.select(df2.col("MERCH_ID"), df1.col("MERCHANT")));
我也尝试过“别名”功能,但遇到了同样的问题“无法解析列名”。并抛出以下异常。
已解决的属性MERCH_ID#738缺少MERCHANT#737,MERCHANT#928,MERCH_ID#929,MER_LOC#930 in operator!Project [MERCH_ID#738,MERCHANT#737];
at org.apache.spark.sql.catalyst.analysis.CheckAnalysis $ class.failAnalysis(CheckAnalysis.scala:38)
Spark版本:1.6
Scala和Java Spark都遇到了这个问题。
在Scala中,问题已使用“别名”解决,但在Java中,我仍然收到错误。
答案 0 :(得分:7)
根据我的经验,除非消除歧义,否则最好避免DataFrame.col
和DataFrame.apply
(别名仍然更好)。请尝试使用独立的Column
个对象:
import org.apache.spark.sql.functions;
DataFrame df= df1.alias("df1").
.join(df2.alias("df2"), functions.col("df1.MERCHANT").equalTo(functions.col("df2.MERCHANT")))
.select(functions.col("df2.MERCH_ID"), functions.col("df2.MERCHANT")));
答案 1 :(得分:0)
导入org.apache.spark.sql.functions;
已加入数据集DF = DF1.join(DF2,DF1.col(“ _ c1”)。equalTo(DF2.col(“ _ c1”))));
如果列没有标题,则_c1代表列1