当前位置: 首页 > 知识库问答 >
问题:

在spark中从拼花文件读取特定列的有效方法

凌蕴藉
2023-03-14

从具有多个列的拼花地板文件中仅读取spark中的列子集的最有效方法是什么?正在使用spark。阅读格式(“拼花”)。负载(

共有3个答案

朱乐逸
2023-03-14

镶木地板是一种柱状文件格式。它正是为这类用例而设计的。

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

应该为你做这项工作。

越麒
2023-03-14

Spark支持实木地板推压,因此

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

很好。

我也更喜欢使用类型安全数据集和案例类来预先定义我的模式,但不确定。

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

禹昊穹
2023-03-14
val df = spark.read.parquet("fs://path/file.parquet").select(...)

这将只读取相应的列。事实上,拼花是一个柱状存储,它正是为这种类型的用例而设计的。尝试运行df.explain,火花会告诉你只读取相应的列(它打印执行计划)。解释还会告诉你哪些过滤器被下推到执行的物理计划中,以防你也使用了一个在哪里的条件。最后使用以下代码将数据帧(行的数据集)转换为案例类的数据集。

case class MyData...
val ds = df.as[MyData]
 类似资料:
  • 如何读取带有条件作为数据帧的分区镶木地板, 这工作得很好, 分区存在的时间为< code>day=1到day=30是否可能读取类似于< code>(day = 5到6)或< code>day=5,day=6的内容, 如果我输入< code>*,它会给出所有30天的数据,而且太大了。

  • 则错误如下: AttributeError:“property”对象没有属性“parquet”

  • 问题内容: 我有一个文本文件,其中包含一个由数字组成的表格,例如: 5 10 6 6 20 1 7 30 4 8 40 3 9 23 1 4 13 6 例如,如果我想要仅包含在第二列中的数字,我该如何将该列提取到列表中? 问题答案: 您可以使用列表理解来做同样的事情 Docs 返回字符串的单词列表。如果不存在可选的第二个参数sep或“无”,则单词将由任意的空白字符字符串(空格,制表符,换行符,返回

  • 我需要从不是父目录或子目录的多个路径读取拼花地板文件。 例如, 从dir1\u 1和dir1\u 2读取拼花文件 现在,我正在读取每个目录并使用“unionAll”合并数据帧。有没有一种方法可以不使用unionAll从dir1\u 2和dir2\u 1读取拼花地板文件,或者有没有什么奇特的方法可以使用unionAll 谢谢

  • 我们正在寻找一种解决方案,以便创建一个外部配置单元表,根据parquet/avro模式从parquet文件中读取数据。 换句话说,如何从拼花/avro模式生成hive表? 谢谢:)

  • 我有一个拼花格式的大数据集(大小约1TB),分为2个层次: