Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Apache spark 将数据帧保存到配置单元表中的有效方法是什么?_Apache Spark_Hive_Apache Spark Sql - Fatal编程技术网

Apache spark 将数据帧保存到配置单元表中的有效方法是什么?

Apache spark 将数据帧保存到配置单元表中的有效方法是什么?,apache-spark,hive,apache-spark-sql,Apache Spark,Hive,Apache Spark Sql,我们正在从Greenplum迁移到HDFS。 数据通过巨大的ETL从源表到Greenplum,从Greenplum,我们只是使用Spark将数据转储到HDF中。 所以我尝试读取GP表,并使用Spark将其加载到HDFS上的配置单元表中 我有一个从GP表读取的数据帧,如下所示: val yearDF = spark.read.format("jdbc").option("url", connectionUrl) .option("d

我们正在从Greenplum迁移到HDFS。 数据通过巨大的ETL从源表到Greenplum,从Greenplum,我们只是使用Spark将数据转储到HDF中。 所以我尝试读取GP表,并使用Spark将其加载到HDFS上的配置单元表中

我有一个从GP表读取的数据帧,如下所示:

  val yearDF    = spark.read.format("jdbc").option("url", connectionUrl)
                            .option("dbtable", s"(${execQuery}) as year2017")
                            .option("user", devUserName)
                            .option("password", devPassword)
                            .option("numPartitions",10)
                            .load()
将数据帧保存到配置单元表中有不同的选项

第一种方法:

yearDf.write().mode("overwrite").partitionBy("source_system_name","period_year","period_num").saveAsTable("schemaName.tableName");
第二种方法:

 myDf.createOrReplaceTempView("yearData");
 spark.sql("insert into schema.table partition("source_system_name","period_year","period_num") select * from yearData");
上述方法的优缺点是什么?
我们在生产中有巨大的表,通常需要很多时间才能将数据加载到配置单元中。有谁能告诉我,将数据帧中的数据保存到配置单元表中的最有效和推荐的方法是什么?

我的2美分:小心词汇表——HDFS不是数据库,配置单元不是存储数据的对象……“效率”与加载后如何使用该数据有很大关系。你考虑哪种文件格式——ORC、拼盘、AVRO、CSV?压缩,哪种?被分割了,怎么分割。。。另外,在不支持更新/删除操作的情况下,您希望如何更新数据?关于您的特定(但与上下文无关)问题:两种方法应该具有相同的“效率”,但SQL Insert应该提供与配置单元更好的二进制兼容性。关于从JDBC读取的代码片段缺少一些必需的选项(事实上,这是一个棘手的部分)关于如何将记录拆分成10个分区——从10个运行10个并发DB会话的执行器并行读取——而不会有太多的偏移……顺便问一下,您真的有足够的RAM将整个表存储在内存中吗??使用
spark.rdd.compress=true
和LZ4,您的容量可能会增加2倍(如果你幸运的话),但要小心地进行压力测试。。。