带有特定列的Spark Read Orc

时间:2018-11-15 10:45:36

标签: apache-spark apache-spark-sql

我有一个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)?

2 个答案:

答案 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()