abh*_*nag 12 java apache-spark apache-spark-sql
我在使用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")));
Run Code Online (Sandbox Code Playgroud)
我也尝试过"别名"功能,但遇到了同样的问题"无法解析列名".并抛出以下异常.
MERCHANT#737,MERCHANT#928,MERCH_ID#929,MER_LOC#930在运营商!项目[MERCH_ID#738,MERCHANT#737]中缺少已解决的属性MERCH_ID#738;
在org.apache.spark.sql.catalyst.analysis.CheckAnalysis $ class.failAnalysis(CheckAnalysis.scala:38)
Spark版本:1.6
Scala和Java Spark都遇到了这个问题.
在Scala中,使用" 别名 " 解决了问题,但在Java中,我仍然遇到错误.
根据我的经验,最好避免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")));
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
939 次 |
| 最近记录: |