SparkSQL插入配置单元表失败



我是Spark的初学者,我曾尝试在SparkSQL中将数据插入配置单元表中,但出现错误java.lang.ArrayIndexOutOfBoundsException:0位于org.apache.spark.sql.cocatalyst.expressions.GenericRow.isNullAt(rows.scala:79)

请在下面找到我的代码:

public class HiveWriter {
public static class IPCCount implements Serializable {
    public IPCCount(int permid, int year, String ipc, int count) {
        this.permid = permid;
        this.year = year;
        this.ipc = ipc;
        this.count = count;
    }
    public int permid;
    public int year;
    public int count = 0;
    public String ipc;
}
public static void main(String[] args) {
    SparkConf sparkConf = new SparkConf().setAppName("HiveWriter");
    JavaSparkContext sc = new JavaSparkContext(sparkConf);
    HiveContext sqlContext = new org.apache.spark.sql.hive.HiveContext(sc.sc());
    JavaRDD<IPCCount> lines = sc.parallelize(Arrays.asList(new IPCCount(000000000, 2010, "000000000", 10)));
    DataFrame df = sqlContext.createDataFrame(lines, IPCCount.class);
    df.registerTempTable("ipc_codes_new");
    sqlContext.sql("INSERT INTO TABLE xademo.ipc_codes SELECT * FROM ipc_codes_new");
    sc.close();
}}

从配置单元表中读取数据效果良好,但我无法插入数据。我还测试了临时表中的数据是否存在。

我使用Spark 1.3。

提前感谢!

如果我没有记错,registerTempTable不会使表ipc_codes_new可用于配置单元,换句话说,临时表对实际配置单元表不可见。

该临时表可以由Spark上的HiveContext(作为临时源)使用,但不能由Hive本身使用。您发送的INSERT查询直接进入配置单元本身。

相关内容

  • 没有找到相关文章

最新更新