Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/5.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 HDFS中复制分区的最佳方法_Apache Spark_Hive_Hdfs_Parquet_Impala - Fatal编程技术网

Apache spark HDFS中复制分区的最佳方法

Apache spark HDFS中复制分区的最佳方法,apache-spark,hive,hdfs,parquet,impala,Apache Spark,Hive,Hdfs,Parquet,Impala,因此,我有一个用例,我想复制表的最后一个分区,并用新的分区列值将其插入同一个表中 需要注意的是,最后一个分区值总是已知的 我可以想出两种方法 在数据框中获取其中partitionColumn=partitionValue,并使用。withColumn更改分区值,然后使用保存表,然后执行无效/刷新操作 或者, 从最后一个分区目录复制parquet文件 创建新分区,将其粘贴到新目录中,并在末尾添加/newpatrionvalue/ 粘贴拼花地板文件 运行altertable 哪一种运行得更快?我认

因此,我有一个用例,我想复制表的最后一个分区,并用新的分区列值将其插入同一个表中

需要注意的是,最后一个分区值总是已知的

我可以想出两种方法

  • 数据框中获取
    其中partitionColumn=partitionValue
    ,并使用
    。withColumn
    更改分区值,然后使用
    保存表
    ,然后执行无效/刷新操作
  • 或者,
  • 从最后一个分区目录复制
    parquet
    文件
  • 创建新分区,将其粘贴到新目录中,并在末尾添加
    /newpatrionvalue/
  • 粘贴拼花地板文件
  • 运行
    altertable

  • 哪一种运行得更快?

    我认为方法1会有一些额外的开销。Spark可能会尝试以不同的方式写入文件(可能是文件数或压缩,甚至是一些模式修改),因为从它的角度来看,您正在读取一个数据集,然后输出另一个数据集

    使用方法2只需将文件复制到另一个文件夹,复制后的数据将完全相同。此外,您甚至可以替换
    altertable。。添加分区。。位置..
    使用
    MSCK修复表..
    ,它将使代码更干净,因为传递的参数更少


    您(和您的团队)的偏好也很重要。如果您的所有工作流都已处于Spark中,那么从长远来看,添加其他类型的作业将造成更大的危害

    我认为方法1将有一些额外的开销。Spark可能会尝试以不同的方式写入文件(可能是文件数或压缩,甚至是一些模式修改),因为从它的角度来看,您正在读取一个数据集,然后输出另一个数据集

    使用方法2只需将文件复制到另一个文件夹,复制后的数据将完全相同。此外,您甚至可以替换
    altertable。。添加分区。。位置..
    使用
    MSCK修复表..
    ,它将使代码更干净,因为传递的参数更少


    您(和您的团队)的偏好也很重要。如果您的所有工作流都已处于Spark中,那么从长远来看,添加其他类型的作业将造成更大的危害

    这样做的目的是什么?为什么在两个分区中需要相同的数据?这是因为用例的缘故。这是一份每周的工作。如果看不到新的转储(边缘节点上的文件),我们应该将旧数据保留在新分区中。这有什么用?为什么在两个分区中需要相同的数据?这是因为用例的缘故。这是一份每周的工作。如果看不到新的转储(边缘节点上的文件),我们应该将旧数据保留在新分区中。