这是我的数据集:
val bfDS = sessions.select("bf")
sessions.select("bf").printSchema
|-- bf: array (nullable = true)
| |-- element: struct (containsNull = true)
| | |-- s: struct (nullable = true)
| | | |-- a: string (nullable = true)
| | | |-- b: string (nullable = true)
| | | |-- c: string (nullable = true)
| | |-- a: struct (nullable = true)
| | | |-- a: integer (nullable = true)
| | | |-- b: long (nullable = true)
| | | |-- c: integer (nullable = true)
| | | |-- d: array (nullable = true)
| | | | |-- element: struct (containsNull = true)
| | | | | |-- a: string (nullable = true)
| | | | | |-- b: integer (nullable = true)
| | | | | |-- c: long (nullable = true)
| | |-- tr: struct (nullable = true)
| | | |-- a: integer (nullable = true)
| | | |-- b: long (nullable = true)
| | | |-- c: integer (nullable = true)
| | | |-- d: array (nullable = true)
| | | | |-- element: struct (containsNull = true)
| | | | | |-- e: string (nullable = true)
| | | | | |-- f: integer (nullable = true)
| | | | | |-- g: long (nullable = true)
| | |-- cs: struct (nullable = true)
| | | |-- a: integer (nullable = true)
| | | |-- b: long (nullable = true)
| | | |-- c: integer (nullable = true)
| | | |-- d: array (nullable = true)
| | | | |-- element: struct (containsNull = true)
| | | | | |-- e: string (nullable = true)
| | | | | |-- f: integer (nullable = true)
| | | | | |-- g: long (nullable = true)
字符串
1.我想我不是很了解Scala数据集。数据集是由行组成的,但是当我打印架构时,它显示的是一个数组。数据集如何Map到数组?每行是数组中的一个元素吗?
1.我想把我的数据集转换成一个case类。
case类特性(s:可迭代[自定义类型],a:可迭代[自定义类型],tr:可迭代[自定义类型],cs:可迭代[自定义类型])
如何转换数据集以及如何使用编码器?
1条答案
按热度按时间yws3nbqq1#
首先,Spark
Row
s可以编码各种值,包括Arrays
和Structures
。其次,您的嵌套框架的行仅由一个
Array[...]
类型的列组成。第三,如果你想从你的df创建一个
Dataset
,你的case class
必须匹配你的schema,在这种情况下,它应该是这样的:字符串
最后,
Encoder
用于将case类及其值转换为Spark内部表示。您不应该太在意它们-您只需要import spark.implicits._
,所有需要的编码器都会自动出现。型
另外,你应该看看this作为参考。