python - PySpark : Optimize read/load from Delta using selected columns or partitions

标签 python apache-spark pyspark delta-lake

我正在尝试将数据从 Delta 加载到 pyspark 数据帧中。

path_to_data = 's3://mybucket/daily_data/'
df = spark.read.format("delta").load(path_to_data)
现在基础数据按日期分区为
s3://mybucket/daily_data/
    dt=2020-06-12
    dt=2020-06-13
    ...
    dt=2020-06-22
有没有办法优化读取数据帧,给定:
  • 只需要特定的日期范围
  • 只需要列的子集

  • 目前的方式,我试过是:
    df.registerTempTable("my_table")
    new_df = spark.sql("select col1,col2 from my_table where dt_col > '2020-06-20' ")
    # dt_col is column in dataframe of timestamp dtype.
    
    在上述状态下,Spark是否需要加载整个数据,根据日期范围过滤数据,然后过滤需要的列? pyspark read 中是否有任何优化可以加载数据,因为它已经分区?
    在线的东西:
    df = spark.read.format("delta").load(path_to_data,cols_to_read=['col1','col2'])
    or 
    df = spark.read.format("delta").load(path_to_data,partitions=[...])
    

    最佳答案

    在您的情况下,不需要额外的步骤。优化将由 Spark 负责。由于您已经根据列 dt 对数据集进行了分区当您尝试使用分区列查询数据集时 dt作为过滤条件。 Spark 仅加载源数据集中与过滤条件匹配的数据子集,在您的情况下为 dt > '2020-06-20' .
    Spark 在内部进行基于优化的分区修剪。

    关于python - PySpark : Optimize read/load from Delta using selected columns or partitions,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62540229/

    相关文章:

    apache-spark - UserWarning : pyarrow. open_stream 已弃用,请使用 pyarrow.ipc.open_stream 警告

    python - 合并两个 PySpark DataFrame 会产生意想不到的结果

    python - 在 Python 3 中计算 Intel Hex 记录的校验和

    python - Pandas :如何按列和索引对数据框进行排序

    python - 这是 python pandas DataFrame 后排序绘图错误吗?

    amazon-web-services - 如何在粘合作业中添加当前时间戳(额外列),以便输出数据具有额外列

    apache-spark - 为什么单元素 RDD 中有这么多分区

    python - 如果满足条件但在列中指定了条件,则 Pandas 滚动总和

    python - Paramiko exec_command 卡在 docker exec 上

    python - PySpark 将 DataFrame 保存到实际的 JSON 文件