当前位置: 首页 > 知识库问答 >
问题:

如何在使用火花数据帧写入时自动计算 numRepartition

劳韬
2023-03-14

当我尝试将数据帧写入Hive Parket分区表时

df.write.partitionBy("key").mode("append").format("hive").saveAsTable("db.table")

它将在HDFS中创建大量块,每个块只有少量数据。

我了解它是如何进行的,因为每个 spark 子任务将创建一个块,然后将数据写入其中。

我也理解,块数会提高Hadoop的性能,但达到阈值后也会降低性能

如果我想自动设置数字分区,有人有一个好主意吗?

numPartition = ??? // auto calc basing on df size or something
df.repartition("numPartition").write
  .partitionBy("key")
  .format("hive")
  .saveAsTable("db.table")

共有2个答案

有品
2023-03-14

默认情况下,火花将为洗牌操作创建200个分区。因此,200个文件/块(如果文件大小较小)将写入HDFS。

使用以下配置,根据Spark中的数据,配置洗牌后要创建的分区数:

spark.conf.set("spark.sql.shuffle.partitions", <Number of paritions>)

例如:spark.conf.set("spark.sql.shuffle.partitions","5"),所以Spark将创建5个分区,5个文件将写入HDFS。

戚奇略
2023-03-14

首先,当您已经在使用< code>partitionBy(key)时,为什么要有一个额外的重新分区步骤呢——您的数据将基于键进行分区。

通常,您可以按列值重新分区,这是一种常见的场景,有助于诸如reduceByKey、基于列值的筛选等操作。例如,

val birthYears = List(
  (2000, "name1"),
  (2000, "name2"),
  (2001, "name3"),
  (2000, "name4"),
  (2001, "name5")
)
val df = birthYears.toDF("year", "name")

df.repartition($"year") 
 类似资料:
  • 我正在尝试使用Databricks的spark-csv2.10依赖关系将一个数据帧写入到HDFS的*.csv文件。依赖关系似乎可以正常工作,因为我可以将.csv文件读入数据帧。但是当我执行写操作时,我会得到以下错误。将头写入文件后会出现异常。 当我将查询更改为时,write工作很好。 有谁能帮我一下吗? 编辑:根据Chandan的请求,这里是的结果

  • 在PySpark中或者至少在Scala中,Apache Spark中是否有与Pandas Melt函数等价的函数? 到目前为止,我一直在用Python运行一个示例数据集,现在我想对整个数据集使用Spark。

  • 类似的问题,但没有足够的观点来评论。 根据最新的Spark文档,< code>udf有两种不同的用法,一种用于SQL,另一种用于DataFrame。我找到了许多关于如何在sql中使用< code>udf的例子,但是还没有找到任何关于如何在数据帧中直接使用< code>udf的例子。 o.p.针对上述问题提供的解决方案使用,这是,将根据Spark Java API文档在Spark 2.0中删除。在那

  • 我在Spark 2.1.0/Cassandra 3.10集群(4台机器*12个内核*256个RAM*2个SSD)上工作,很长一段时间以来,我一直在努力使用Spark Cassandra connector 2.0.1向Cassandra写入特定的大数据帧。 这是我的表的模式 用作主键的散列是256位;列表字段包含多达1MB的某种结构化类型的数据。总共,我需要写几亿行。 目前,我正在使用以下写入方法

  • 我想过滤掉具有“c2”列前3个字符的记录,无论是“MSL”还是“HCP”。 所以输出应该如下所示。 有谁能帮忙吗? 我知道df。过滤器($c2.rlike(“MSL”))--用于选择记录,但如何排除记录? 版本:Spark 1.6.2 Scala:2.10

  • 有一个spark_df有许多重复如下: 现在我想将这个spark_df转换如下: 我在熊猫身上知道这一点。但是我正在努力学习火花,这样我就可以把它实施到大数据中。如果有人能帮忙,那就太好了。