如何在Spark中读取嵌套集合

塔加尔

我有一张镶木地板,其中一列是

,数组<struct <col1,col2,.. colN >>

可以使用LATERAL VIEW语法在Hive中对此表运行查询。

如何将此表读入RDD,更重要的是如何在Spark中过滤,映射此嵌套集合等?

在Spark文档中找不到对此的任何引用。在此先感谢您提供任何信息!

ps。我觉得在表格上提供一些数据可能会有所帮助。主表中的列数约为600。行数〜200m。嵌套集合中的“列”数约为10。嵌套集合中的平均记录数约为35。

洛米加·梅加德(Lomig Megard)

在嵌套集合的情况下没有魔术。Spark将以与aRDD[(String, String)]和a相同的方式处理RDD[(String, Seq[String])]

但是,从Parquet文件中读取此类嵌套集合可能很棘手。

让我们以spark-shell(1.3.1)为例

scala> import sqlContext.implicits._
import sqlContext.implicits._

scala> case class Inner(a: String, b: String)
defined class Inner

scala> case class Outer(key: String, inners: Seq[Inner])
defined class Outer

编写实木复合地板文件:

scala> val outers = sc.parallelize(List(Outer("k1", List(Inner("a", "b")))))
outers: org.apache.spark.rdd.RDD[Outer] = ParallelCollectionRDD[0] at parallelize at <console>:25

scala> outers.toDF.saveAsParquetFile("outers.parquet")

读取实木复合地板文件:

scala> import org.apache.spark.sql.catalyst.expressions.Row
import org.apache.spark.sql.catalyst.expressions.Row

scala> val dataFrame = sqlContext.parquetFile("outers.parquet")
dataFrame: org.apache.spark.sql.DataFrame = [key: string, inners: array<struct<a:string,b:string>>]   

scala> val outers = dataFrame.map { row =>
     |   val key = row.getString(0)
     |   val inners = row.getAs[Seq[Row]](1).map(r => Inner(r.getString(0), r.getString(1)))
     |   Outer(key, inners)
     | }
outers: org.apache.spark.rdd.RDD[Outer] = MapPartitionsRDD[8] at map at DataFrame.scala:848

重要的是row.getAs[Seq[Row]](1)structis的嵌套序列的内部表示形式ArrayBuffer[Row],可以使用它的任何超类型代替Seq[Row]1是外部行中的列索引。我在getAs这里使用了该方法,但最新版本的Spark中有替代方法请参阅Row特质的源代码

现在有了RDD[Outer],您可以应用任何所需的转换或操作。

// Filter the outers
outers.filter(_.inners.nonEmpty)

// Filter the inners
outers.map(outer => outer.copy(inners = outer.inners.filter(_.a == "a")))

请注意,我们仅使用spark-SQL库读取镶木地板文件。例如,您可以直接在DataFrame上选择所需的列,然后再将其映射到RDD。

dataFrame.select('col1, 'col2).map { row => ... }

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何在Spark Scala中读取多行嵌套json

来自分类Dev

如何使用Java从Spark中的kafka读取流嵌套的JSON

来自分类Dev

如何在Linq和EF中订购嵌套集合

来自分类Dev

如何在Cloud Flutter Firestore中处理嵌套集合查询?

来自分类Dev

Backbone.js如何在嵌套集合中检索模型?

来自分类Dev

如何在Java中Firebase的数据中存在嵌套集合的类中存储数据集合?

来自分类Dev

如何在Firestore中读取嵌套的数组和地图?

来自分类Dev

如何在 Pandas 数据框中读取嵌套的 json 文件?

来自分类Dev

如何在 Java 中读取嵌套的非数组 JSON?

来自分类Dev

如何在Spark SQL中解析嵌套的JSON对象?

来自分类Dev

如何在 Spark/Scala 数据导入中处理嵌套的键值对

来自分类Dev

如何在Spark中读取多个线元素?

来自分类Dev

如何在Spark中读取HDFS序列文件

来自分类Dev

如何在mongodb集合中搜索嵌套在数组中的字典键

来自分类Dev

如何在React-native中从Firestore中读取子集合的文档字段

来自分类Dev

如何在Powershell中显示带有.ps1xml文件的嵌套集合

来自分类Dev

如何在MongoDB PHP中获取嵌套在集合中文档内部的对象值

来自分类Dev

如何在MongoDB聚合管道中执行嵌套的“联接”(联接3个或更多集合)?

来自分类Dev

如何从laravel的集合中读取数据

来自分类Dev

如何在Spark2.4的spark2-shell中读取Avro文件?

来自分类Dev

如何选择最不同的值或如何在 Spark 中执行内部/嵌套 groupBy?

来自分类Dev

如何从 Julia 中的 csv 读取嵌套字典

来自分类Dev

我如何在MongoDB中搜索集合以在其文档之一中找到嵌套值

来自分类Dev

如何在Excel中嵌套IF,AND或OR

来自分类Dev

如何在Spark Scala数据框中更新xml的嵌套列值

来自分类Dev

如何在Spark Dataset中存储嵌套的自定义对象?

来自分类Dev

如何在tvOS中使用嵌套集合视图更改重用表视图单元格中的焦点?

来自分类Dev

如何在Spark中读取Cassandra分区时获得良好的性能?

来自分类Dev

如何在Java Spark中读取文本文件并将其转换为数据集?

Related 相关文章

  1. 1

    如何在Spark Scala中读取多行嵌套json

  2. 2

    如何使用Java从Spark中的kafka读取流嵌套的JSON

  3. 3

    如何在Linq和EF中订购嵌套集合

  4. 4

    如何在Cloud Flutter Firestore中处理嵌套集合查询?

  5. 5

    Backbone.js如何在嵌套集合中检索模型?

  6. 6

    如何在Java中Firebase的数据中存在嵌套集合的类中存储数据集合?

  7. 7

    如何在Firestore中读取嵌套的数组和地图?

  8. 8

    如何在 Pandas 数据框中读取嵌套的 json 文件?

  9. 9

    如何在 Java 中读取嵌套的非数组 JSON?

  10. 10

    如何在Spark SQL中解析嵌套的JSON对象?

  11. 11

    如何在 Spark/Scala 数据导入中处理嵌套的键值对

  12. 12

    如何在Spark中读取多个线元素?

  13. 13

    如何在Spark中读取HDFS序列文件

  14. 14

    如何在mongodb集合中搜索嵌套在数组中的字典键

  15. 15

    如何在React-native中从Firestore中读取子集合的文档字段

  16. 16

    如何在Powershell中显示带有.ps1xml文件的嵌套集合

  17. 17

    如何在MongoDB PHP中获取嵌套在集合中文档内部的对象值

  18. 18

    如何在MongoDB聚合管道中执行嵌套的“联接”(联接3个或更多集合)?

  19. 19

    如何从laravel的集合中读取数据

  20. 20

    如何在Spark2.4的spark2-shell中读取Avro文件?

  21. 21

    如何选择最不同的值或如何在 Spark 中执行内部/嵌套 groupBy?

  22. 22

    如何从 Julia 中的 csv 读取嵌套字典

  23. 23

    我如何在MongoDB中搜索集合以在其文档之一中找到嵌套值

  24. 24

    如何在Excel中嵌套IF,AND或OR

  25. 25

    如何在Spark Scala数据框中更新xml的嵌套列值

  26. 26

    如何在Spark Dataset中存储嵌套的自定义对象?

  27. 27

    如何在tvOS中使用嵌套集合视图更改重用表视图单元格中的焦点?

  28. 28

    如何在Spark中读取Cassandra分区时获得良好的性能?

  29. 29

    如何在Java Spark中读取文本文件并将其转换为数据集?

热门标签

归档