Java Spark 将 HIVE View 重制为 INSERT

标签 java hadoop apache-spark hive

我有以下从 HDFS 读取 JSON 文件并使用 Spark 将其输出为 HIVE View 的 Java 代码。

package org.apache.spark.examples.sql.hive;
import java.io.File;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
import org.apache.spark.api.java.function.MapFunction;
import org.apache.spark.sql.Dataset;
import org.apache.spark.sql.Encoders;
import org.apache.spark.sql.Row;
import org.apache.spark.sql.SparkSession;
// $example off:spark_hive$
public class JavaSparkHiveExample {
  public static void main(String[] args) {

    // $example on:spark_hive$
    SparkSession spark = SparkSession
      .builder()
      .appName("Java Spark Hive Example")
            .master("local[*]")
            .config("hive.metastore.uris", "thrift://localhost:9083")
      .enableHiveSupport()
      .getOrCreate();

    Dataset<Row> jsonTest = spark.read().json("/tmp/testJSON.json");
    jsonTest.createOrReplaceTempView("jsonTest");
    Dataset<Row> showAll = spark.sql("SELECT * FROM jsonTest");

    showAll.show();
    spark.stop();
  }
}

为了将 JSON 插入表 test1(例如),我很难将 View 重新制作为 INSERT 语句。

非常感谢您的帮助!

最佳答案

如果你想保存到一个Hive表中,你可以这样做

showAll.write().saveAsTable("tableName") 

如果要读取本地文件给执行器,使用file://作为文件路径的前缀。注意,Spark是一个分布式进程,所以所有的executor都需要能够读取同一个位置的文件,这就是为什么HDFS通常和Spark一起使用

关于Java Spark 将 HIVE View 重制为 INSERT,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48391110/

相关文章:

java - 如何在 Apache Flink 循环的每次迭代中写入文件?

java - 重音字符需要多一个字符

java - 在 pyspark 上运行 sql 查询时出现 MetaException(message :java. lang.IllegalArgumentException : java.net.UnknownHostException)

apache-spark - 我有56列的表格,想加载46列的数据,我该怎么办?

java - 解析大约 700 行文本,将这些行拆分并将它们用作变量?

java - EJB 容器上的 CDI EntityManager 注入(inject) VS @PersistenceContext entitymanager

hadoop - 使用hadoop执行jar文件

powershell - 如何使用Powershell使用Hive Metastore创建Azure HDInsight群集?

hadoop - 对 Hadoop namenode 内存使用的困惑

scala - 如何在 Scala 中找到两个日期时间之间的时差?