我想覆盖特定的分区,而不是spark中的所有分区。我正在尝试以下命令:
df.write.orc('maprfs:///hdfs-base-path','overwrite',partitionBy='col4')
其中df是具有要覆盖的增量数据的数据帧。
hdfs基本路径包含主数据。
当我尝试上述命令时,它会删除所有分区,并将df中存在的分区插入hdfs路径。
我的要求是只覆盖df中指定hdfs路径上的那些分区。有人能帮我一下吗?
spark.conf.set("spark.sql.sources.partitionOverwriteMode","dynamic")
data.toDF().write.mode("overwrite").format("parquet").partitionBy("date", "name").save("s3://path/to/somewhere")
这适用于AWS Glue ETL作业(Glue 1.0-Spark 2.4-Python 2)
这是一个常见的问题。Spark高达2.0的唯一解决方案是直接写入分区目录,例如。,
df.write.mode(SaveMode.Overwrite).save("/root/path/to/data/partition_col=value")
如果您使用的是Spark 2.0之前的版本,则需要使用以下方法阻止Spark发出元数据文件(因为它们会破坏自动分区发现):
sc.hadoopConfiguration.set("parquet.enable.summary-metadata", "false")
如果您使用的是1.6.2之前的Spark,还需要删除根/路径/到/数据/分区列=值中的成功文件,否则它的存在将中断自动分区发现。(我强烈建议使用1.6.2或更高版本。)
您可以从我关于防弹作业的Spark峰会演讲中获得有关如何管理大型分区表的更多详细信息。
终于!这现在是Spark 2.3.0: SPARK-20236中的一项功能
要使用它,需要设置火花。sql。来源。partitionOverwriteMode设置为动态,数据集需要分区,写入模式覆盖。例子:
spark.conf.set("spark.sql.sources.partitionOverwriteMode","dynamic")
data.write.mode("overwrite").insertInto("partitioned_table")
我建议在编写之前根据您的分区列进行重新分区,这样您就不会在每个文件夹中有400个文件。
在Spark 2.3.0之前,最好的解决方案是启动SQL语句删除这些分区,然后使用模式append编写它们。
在我的工作中,最后一步是将执行的数据存储在配置单元表中,分区位于“date”列。有时,由于作业失败,我需要单独为特定的分区重新运行作业。正如所观察到的,当我使用下面的代码时,spark会在使用覆盖模式时覆盖所有分区。 在浏览了多个博客和stackoverflow之后,我按照以下步骤只覆盖特定的分区。 根据本博客https://www.waitingforcode.com/apache-spark-
有人能解释一下将为Spark Dataframe创建的分区数量吗。 我知道对于RDD,在创建它时,我们可以提到如下分区的数量。 但是对于创建时的Spark数据帧,看起来我们没有像RDD那样指定分区数量的选项。 我认为唯一的可能性是,在创建数据帧后,我们可以使用重新分区API。 有人能告诉我在创建数据帧时,我们是否可以指定分区的数量。
我正在编写一个脚本,将带有标头的大. xlsx文件减少到CSV中,然后根据标头名称编写一个新的CSV文件,其中仅包含所需的列。 我得到的错误是最后一段代码,它说 我肯定我忽略了一些愚蠢的东西,但是我已经阅读了熊猫网站上的留档,我仍然不知所措。我知道我误用了to_csv参数,但我似乎无法理解留档。 任何帮助都是赞赏的,谢谢!
我正在尝试使用pysparkn和spack-csv使用以下代码将火花数据帧写入s3 但是,我得到的错误是“输出目录已经存在”,我确信输出目录在作业开始之前不存在,我尝试使用不同的输出目录名称运行,但写入仍然失败。 如果我在作业失败后查看s3桶,我发现很少有零件文件是由火花写入的,但当它尝试写入更多时它失败了,脚本在本地运行良好,我在aws集群上使用10个火花执行器。有人知道这段代码有什么问题吗?
在scala火花数据帧中是否有的替代方案。我想从火花数据帧的列中选择特定的行。例如,在R等效代码中的第100行
问题内容: 我想为 isEmpty 方法添加自定义行为。 当我从 我应该重写序列化方法,因为它是抽象的。 我想按原样保留序列化方法,并仅覆盖isEmpty方法。 问题答案: 为了修改行为但保持默认的序列化,您可以利用 serializer修饰符 。您仍然必须实现自定义序列化程序,但是可以非常干净地利用默认序列化程序。 使用默认的序列化器创建一个自定义序列化器 将变量插入到您的自定义序列化器类中。当