首页 文章

从spark中的镶木地板文件中读取特定列的有效方法

提问于
浏览
2

从具有多列的拼花文件中只读取spark中的列子集的最有效方法是什么?使用 spark.read.format("parquet").load(<parquet>).select(...col1, col2) 是最好的方法吗?我还希望使用带有案例类的类型安全数据集来预先定义我的架构,但不确定 .

3 回答

  • 1
    val df = spark.read.parquet("fs://path/file.parquet").select(...)
    

    这只会读取相应的列 . 实际上,镶木地板是一个柱状存储器,它正是这种用例的意思 . 尝试运行 df.explain 并且spark会告诉您只读取相应的列(它会打印执行计划) . explain 还会告诉您哪些过滤器被推送到物理执行计划,以防您使用where条件 . 最后使用以下代码将数据框(行的数据集)转换为案例类的数据集 .

    case class MyData...
    val ds = df.as[MyData]
    
  • 3

    Spark支持Parquet的下推

    load(<parquet>).select(...col1, col2)
    

    很好 .

    我还希望使用带有案例类的类型安全数据集来预定义我的架构,但不确定 .

    这可能是一个问题,因为看起来某些优化在此上下文中不起作用Spark 2.0 Dataset vs DataFrame

  • 5

    Parquet是一种柱状文件格式 . 它专为这类用例而设计 .

    val df = spark.read.parquet("<PATH_TO_FILE>").select(...)
    

    应该为你做的工作 .

相关问题