如何将表数据加载到databricks中的数据帧中?逐行还是批量



我是databricks笔记本电脑和数据框架的新手。我有一个要求,在一个约有1400万条记录的表中,将几列(从多列中(加载到一个数据帧中。一旦表被加载,我需要根据两列中的值创建一个新列。

我想在将表加载到数据帧中时,为新列编写逻辑以及select命令。例如:

df =  spark.read.table(tableName)
.select(columnsList)
.withColumn('newColumnName', 'logic')

它会对性能产生影响吗?先将少数列的表加载到df中,然后对加载的df执行列操作,这样更好吗?

表数据是一次全部加载还是逐行加载到df中?如果一行接一行,那么在读取表时包含列操作逻辑,是否会导致性能下降?

提前感谢!!

这实际上取决于表的底层格式-它是由Parquet或Delta支持的,还是到实际数据库的接口等。通常,Spark试图只读取必要的数据,例如,如果使用Parquet(或Delta(,则会更容易,因为它是面向列的文件格式,因此每列的数据都放在一起。

关于阅读中的问题-Spark默认情况下是惰性的,所以即使您将df = spark.read.table(....)作为单独的变量,然后添加.select,再添加.withColumn,它也不会做任何事情,直到您调用一些操作,例如.count,或者编写结果。在那之前,Spark只会检查表是否存在,您的操作是否正确等。您可以随时对生成的数据帧调用.explain,以查看Spark将如何执行操作。

附言:我建议免费获得Databricks提供的Learning Spark,2ed的副本,它将为Spark/Databricks的代码开发提供基础

最新更新