火花阅读兽人与特定的列



我有一个orc文件,当使用下面的选项读取时,它会读取所有列。

val df= spark.read.orc("/some/path/")
df.printSChema
root
 |-- id: string (nullable = true)
 |-- name: string (nullable = true)
 |-- value: string (nullable = true)
 |-- all: string (nullable = true)
 |-- next: string (nullable = true)
 |-- action: string (nullable = true)

但我只想从该文件中读取两列,有没有办法在加载orc文件时只读取两列(id,name(?

在加载orc文件时,有没有办法只读取两列(id,name(?

是的,您所需要的只是后续选择。Spark将为您处理其余事务:

val df = spark.read.orc("/some/path/").select("id", "name")

Spark有惰性执行模型。因此,您可以在代码中进行任何数据转换,而不会立即产生实际效果。只有在行动之后,才能呼叫Spark开始工作。Spark足够聪明,不会做额外的工作。所以你可以这样写:

val inDF: DataFrame = spark.read.orc("/some/path/")   
import spark.implicits._
val filteredDF: DataFrame = inDF.select($"id", $"name")
// any additional transformations  
// real work starts after this action 
val result: Array[Row] = filteredDF.collect()

最新更新