• Leap Frame 操作
    • 插入数据
      • 插入可选值
    • 删除字段
    • 读取数据
    • 选取字段

    Leap Frame 操作

    Leap Frame 提供了如下基本操作:

    1. 创建新列并插入数据
    2. 删除列
    3. 读取一行数据
    4. 选出多列数据并插入到一条新的 Leap Frame 当中

    插入数据

    从已有字段中生成新的值非常简单,只需要指定输出字段的名字,输入字段的列表,以及一个能够生成新的输出的 Scala 函数。

    1. // Insert some values into the leap frame
    2. val leapFrame2 = leapFrame.withOutput("generated_field", "a_string", "an_int") {
    3. (str: String, i: Int) => s"$str: $i"
    4. }
    5. // Extract our new data from the leap frame
    6. val generatedStrings: Seq[String] = (for(lf <- leapFrame2;
    7. lf2 <- lf.select("generated_field", "a_string", "an_int")) yield {
    8. val str = lf2.dataset(0).getString(1) // get value of "a_string"
    9. val i = lf2.dataset(0).getInt(2) // get value of "an_int"
    10. assert(lf2.dataset(0).getString(0) == s"$str: $i")
    11. lf2.dataset.map(_.getString(0))
    12. }).get.toSeq
    13. // Print out our generated strings
    14. // > "Hello, MLeap!: 42"
    15. // > "Another row: 43"
    16. println(generatedStrings.mkString("\n"))

    插入可选值

    MLeap 中的 Null 值通过 Scala 中的 Option 单子来实现。让我们输出一些可选的 Null 值到 Leap Frame 中。

    1. // Insert some values into the leap frame
    2. val leapFrame3 = leapFrame.withOutput("optional_int", "a_double", "an_int") {
    3. (d: Double, i: Int) =>
    4. if(i > 42) {
    5. Some(777)
    6. } else { None }
    7. }
    8. // Extract our new data from the leap frame
    9. val optionalInts: Seq[Option[Int]] = (for(lf <- leapFrame3;
    10. lf2 <- lf.select("optional_int")) yield {
    11. lf2.dataset.map(_.optionInt(0))
    12. }).get.toSeq
    13. // Print out our optional ints
    14. // > Some(777)
    15. // > None
    16. println(optionalInts.mkString("\n"))

    删除字段

    从 Leap Frame 中删除一个字段。

    1. assert(leapFrame.schema.hasField("a_double"))
    2. for(lf <- leapFrame.dropField("a_double")) {
    3. assert(!lf.schema.hasField("a_double"))
    4. }

    读取数据

    访问 Leap Frame 中的数据行。

    1. val data = leapFrame.dataset
    2. assert(data.head == Row("Hello, MLeap!", 56.7d, 13.0f, 42, 67l))
    3. assert(data(1) == Row("Another row", 23.4d, 11.0f, 43, 88l))
    4. // Datasets are iterable over their rows
    5. assert(data.toSeq.size == 2)

    选取字段

    通过选取已有字段,创建一帧新的 Leap Frame。

    1. assert(leapFrame.schema.hasField("a_double"))
    2. assert(leapFrame.schema.hasField("a_string"))
    3. assert(leapFrame.schema.hasField("an_int"))
    4. assert(leapFrame.schema.fields.size == 5)
    5. for(lf <- leapFrame.select("a_double", "a_string")) {
    6. assert(lf.schema.hasField("a_double"))
    7. assert(lf.schema.hasField("a_string"))
    8. assert(!lf.schema.hasField("an_int"))
    9. assert(lf.schema.fields.size == 2)
    10. }