gpt4 book ai didi

apache-spark - Spark 知道 DataFrame 的分区键吗?

转载 作者:行者123 更新时间:2023-12-03 14:57:09 25 4
gpt4 key购买 nike

我想知道 Spark 是否知道 parquet 文件的分区键并使用此信息来避免洗牌。

上下文:

运行 Spark 2.0.1 运行本地 SparkSession。我有一个 csv 数据集,我将它保存为磁盘上的 Parquet 文件,如下所示:

val df0 = spark
.read
.format("csv")
.option("header", true)
.option("delimiter", ";")
.option("inferSchema", false)
.load("SomeFile.csv"))


val df = df0.repartition(partitionExprs = col("numerocarte"), numPartitions = 42)

df.write
.mode(SaveMode.Overwrite)
.format("parquet")
.option("inferSchema", false)
.save("SomeFile.parquet")

我正在按列创建 42 个分区 numerocarte .这应该分组多个 numerocarte到同一个分区。我不想在 write 做 partitionBy("numerocarte")时间,因为我不想每张卡一个分区。这将是数以百万计的人。

之后在另一个脚本中我读到了这个 SomeFile.parquet parquet 文件并对其进行一些操作。特别是我正在运行 window function在它上面分区是在 Parquet 文件被重新分区的同一列上完成的。
import org.apache.spark.sql.expressions.Window
import org.apache.spark.sql.functions._

val df2 = spark.read
.format("parquet")
.option("header", true)
.option("inferSchema", false)
.load("SomeFile.parquet")

val w = Window.partitionBy(col("numerocarte"))
.orderBy(col("SomeColumn"))

df2.withColumn("NewColumnName",
sum(col("dollars").over(w))

read我可以看到 repartition按预期工作,DataFrame df2有 42 个分区,每个分区都有不同的卡。

问题:
  • Spark 是否知道数据帧 df2按列 numerocarte 分区?
  • 如果它知道,那么窗口函数中就不会出现shuffle。真的?
  • 如果它不知道,它会在窗口函数中做一个 shuffle。真的?
  • 如果它不知道,我如何告诉 Spark 数据已经按正确的列进行了分区?
  • 如何检查 DataFrame 的分区键?有这个命令吗?我知道如何检查分区数但如何查看分区键?
  • 当我在每一步之后打印文件中的分区数时,我在 read 之后有 42 个分区和 withColumn 之后的 200 个分区这表明 Spark 重新分区了我的 DataFrame .
  • 如果我用同一列重新分区了两个不同的表,连接会使用该信息吗?
  • 最佳答案

    Does Spark know that the dataframe df2 is partitioned by column numerocarte?



    它不是。

    If it does not know, how do I tell Spark the data is already partitioned by the right column?



    你没有。仅仅因为您保存了已洗牌的数据,并不意味着它将以相同的拆分加载。

    How can I check a partitioning key of DataFrame?



    加载数据后没有分区键,但您可以查看 queryExecutionPartitioner .

    在实践中:
  • 如果您想支持键上的有效下推,请使用 partitionBy DataFrameWriter的方法.
  • 如果您想要对连接优化的有限支持,请使用 bucketBy带有元存储和持久表。

  • How to define partitioning of DataFrame?有关详细示例。

    关于apache-spark - Spark 知道 DataFrame 的分区键吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50544852/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com