为给定模式创建DataFrame / Dataset的备用解决方案

时间:2018-06-09 07:59:46

标签: apache-spark-sql apache-spark-dataset

我有一个数据集,其案例类如下:

case class Rrow(p: Array[String], o: Array[String], l: Int, tl: Int, ap: Array[String], m: Array[String])

我需要将给定的数据集转换为另一个给定模式的数据集/数据框。

val schema = StructType(schemaFields.map(fieldName => StructField(fieldName, if (mvp.contains(fieldName)) ArrayType(StringType) else StringType, true)))

此处,schemaFields是列名列表。

我使用以下代码为给定架构创建数据帧,但我必须使用RDD来创建数据帧。有没有什么有效的方法可以用来为给定的模式创建数据集/数据帧。

  def getRow(p: Array[String], o: Array[String], l: Int, size: Int, ap: Array[String], m: Array[String]): Row = {
    var columnArray = new Array[Any](size)

    for (i <- 0 to (l - 1)) {
      val index = ap.indexOf(p(i))
      if (m.contains(p(i))) {
        columnArray.update(index, o(i)).split(","))
      } else {
        columnArray.update(index, o(i)).toString())
      }
    }

    Row.fromSeq(columnArray)
  }

  val rowRDD = ds
          .rdd
          .map(r => getRow(r.p, r.o, r.l, r.tl, r.ap, r.m))

  val df = spark.createDataFrame(rowRDD, schema)

0 个答案:

没有答案