如何使用pyspark获得delta表的所有当前分区?

falq053o  于 2021-07-13  发布在  Spark
关注(0)|答案(1)|浏览(885)

我正在使用delta lake的oss版本以及spark 3.0.1。我当前的用例要求我发现给定增量表中的所有当前分区。
我的数据存储在 './data/raw' 按列划分 sensorId (提到的路径是相对于我的python脚本的路径)。
我在试着用 SHOW PARTITIONS 文档中提到的语法。然而,我得到了错误。
我的代码是这样的:

from pyspark.sql import SparkSession
spark = SparkSession.builder.appName("TestScript").getOrCreate()
df=spark.sql("SHOW PARTITIONS delta.`./data/raw`")
df.show()

spark submit命令如下所示:

spark-submit --packages io.delta:delta-core_2.12:0.8.0 --conf "spark.sql.extensions=io.delta.sql.DeltaSparkSessionExtension" --conf "spark.sql.catalog.spark_catalog=org.apache.spark.sql.delta.catalog.DeltaCatalog" test_script.py

我得到以下错误: pyspark.sql.utils.AnalysisException: Database 'delta' not found; 我的另一个问题是 SHOW PARTITIONS 会给我所有的分区还是会限制结果。如果有限制,那么发现/获取增量表的所有分区的最佳方法是什么。

7vhp5slm

7vhp5slm1#

您可以从两个方面看到分区。您提供的文档的链接向您展示了执行此操作的方法。
如果已将数据另存为增量表,则可以通过提供表名而不是增量路径来获取分区信息,它将返回分区信息。
spark.sql(“show partitions schema.tablename”).show()
也可以使用指定表的物理文件所在路径的选项。在您的例子中,您将根据python脚本所在的位置传递相对路径,但这不起作用。您需要传递s3 bucket的确切路径,或者传递它工作所使用的任何存储。
sql(“show partitions delta.dbfs:/mnt/s3/tables/data/raw”).show()
回答上一个问题show partitions是否会提供所有分区。答案是肯定的,但是如果您检查使用df.show()if将只显示前20行。
如果要查看表的所有行/分区,可以对Dataframe进行计数,然后将其作为第二个参数传递给show方法。

val count = df.count()
df.show(count, truncate = False)

相关问题