从自定义对象创建scala数据框

时间:2018-09-05 12:45:45

标签: scala object dataframe nested

我是斯卡拉的新手。我会尽量保持清晰。我有以下代码:

case class Session (bf: Array[File]) 
case class File(s: s, a: Option[a], b: Option[b], c: Option[c])

case class s(s1:Int, s2:String) 
case class a(a1:Int, a2:String) 
case class b(b1:Int, b2:String)  
case class c(c1:Int, c2:String)


val x = Session(...) // some values here, many session objects grouped in a  dataset collection i.e. Dataset[Sessions]
  1. 我想知道如何从数据集[会话]创建数据帧。我不 知道如何操纵这样一个复杂的结构。
  2. 如何从仅包含自定义数据的数据集[会话]创建数据框 对象“ a”。

谢谢

1 个答案:

答案 0 :(得分:1)

Spark DataSet的工作原理类似于常规的Scala集合。它具有一个toDF()操作,可以从中创建一个DataFrame。现在,您只需要使用不同的转换从其中提取正确的数据即可。

  1. flatMap放入DataSet的{​​{1}}
  2. File中的每个filter为非空File
  3. a其余mapFile
  4. 致电a创建一个toDF()

在代码中,这将是:

DataFrame

在Scala中,您还可以将val ds: DataSet[Session] = ... ds.flatMap(_.bf) .filter(_.a.isDefined) .map(_.a.get) .toDF() filter合并为map,这将导致以下代码:

collect