我正在使用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
会给我所有的分区还是会限制结果。如果有限制,那么发现/获取增量表的所有分区的最佳方法是什么。
1条答案
按热度按时间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方法。