pyspark 保存的delta文件读取为df -它仍然是delta lake的一部分吗?

yeotifhr  于 2023-02-21  发布在  Spark
关注(0)|答案(1)|浏览(181)

我对三角洲湖的概念理解有困难。例如:
1.我读了一份 parquet 的文件:
taxi_df = (spark.read.format("parquet").option("header", "true").load("dbfs:/mnt/randomcontainer/taxirides.parquet"))
1.然后我用asTable保存它:
taxi_df.write.format("delta").mode("overwrite").saveAsTable("taxi_managed_table")
1.我读取了刚存储的托管表:
taxi_read_from_managed_table = (spark.read.format("delta").option("header", "true").load("dbfs:/user/hive/warehouse/taxi_managed_table/"))
1....当我检查类型时,它显示"pyspark. sql. datafame. dataFrame",而不是deltaTable:
type(taxi_read_from_managed_table) #返回pyspark. sql. Dataframe . Dataframe
1.只有在使用下面的命令显式转换它之后,我才会收到DeltaTable类型
taxi_delta_table = DeltaTable.convertToDelta(spark,"parquet.数据库文件系统:/用户/配置单元/仓库/出租车管理表/")
type(taxi_delta_table) #返回增量表。增量表
/////////////////////////////
这是否意味着阶段4中的表不是delta表,不会提供delta lake提供的自动优化?
你如何确定某个东西是否是三角洲湖的一部分?
我知道delta live表只适用于delta.tables,对吗?

uttx8gqw

uttx8gqw1#

当你使用spark.read...load()时,它返回Spark的DataFrame对象,你可以用它来处理数据。在这个DataFrame的幕后,使用Delta Lake表。DataFrame抽象数据源,这样你就可以使用不同的数据源并应用相同的操作。
另一方面,DeltaTable是一个特定的对象,它只允许应用Delta特定的操作,你甚至不需要执行convertToDelta就可以得到它--只需要使用DeltaTable.forPathDeltaTable.forName函数就可以得到它的示例。
P.S.如果您使用.saveAsTable(my_name)保存数据,则不需要使用.load,只需使用spark.read.table(my_name)

相关问题