我有一个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)?
答案 0 :(得分:1)
在加载orc文件时有什么方法只能读取两列(id,name)吗?
是的,您需要的只是后续选择。 Spark将为您处理其余的工作:
val df = spark.read.orc("/some/path/").select("id", "name")
答案 1 :(得分:0)
Spark具有惰性执行模型。因此,您可以在代码中进行任何数据转换,而不会立即产生实际效果。仅在action致电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()