在火花中加入两个存在于蜂巢中的表

Posted

技术标签:

【中文标题】在火花中加入两个存在于蜂巢中的表【英文标题】:Joining two tables in spark that are present in hive 【发布时间】:2015-10-26 16:51:31 【问题描述】:

我已经在 eclipse 中编写了 Java 程序来加入 spark 中的两个表,但在 package 附近出现错误 这是下面的错误

类型 scala.reflect.api.TypeTags$TypeTag 无法解析。这是 从所需的 .class 文件中间接引用

这是我写的程序

package joins;

import org.apache.spark.SparkConf;
import org.apache.spark.SparkContext;
import org.apache.spark.api.java.JavaSparkContext;
import org.apache.spark.sql.DataFrame;
import org.apache.spark.sql.hive.HiveContext;

public class Spark 
    public static void main(String[] args) 
        // TODO Auto-generated method stub
        SparkConf conf = new SparkConf();
        SparkContext sc = new SparkContext(conf);
        HiveContext sqlContext = new org.apache.spark.sql.hive.HiveContext(sc);
        sqlContext.sql(" use myown ");
        DataFrame table_01 = sqlContext.sql("SELECT * FROM customer");
        table_01.saveAsTable("spark_table_01");
        sqlContext.cacheTable("spark_table_01");
        DataFrame table_02 = sqlContext.sql("SELECT * FROM account");
        table_02.saveAsTable("spark_table_02");
        sqlContext.cacheTable("spark_table_02");
        DataFrame table_join = sqlContext.sql(" SELECT a.* FROM  customer a join account b on a.ssn=b.ssn ");
        table_join.insertInto("customeraccount");
        sqlContext.uncacheTable("spark_table_01");
        sqlContext.uncacheTable("spark_table_02");
    

【问题讨论】:

我使用的是 spark 1.3.0 【参考方案1】:

您的应用中似乎缺少 scala reflect jar 文件。下载scala-reflect.jar,放到classpath下重新编译。

【讨论】:

【参考方案2】:

在 Eclipse 中,我通过添加 scala-reflect-2.11.8.jar 作为外部 jar 文件解决了这个问题。 jar 文件可以在 Spark 目录的“jars”文件夹中找到。我正在使用 Spark 2.1.0

【讨论】:

以上是关于在火花中加入两个存在于蜂巢中的表的主要内容,如果未能解决你的问题,请参考以下文章

蜂巢上的火花 - 为啥不“选择*”产生火花应用程序/执行程序?

在火花中联合后再次排序的蜂巢表排序

从具有时间戳的镶木地板蜂巢表中读取火花

亚马逊EMR火花上的蜂巢

同一查询中的火花计数和过滤计数

在火花中加入 2 个数据帧后选择特定列