Spark 从多个列表/数组创建数据帧

时间:2021-03-15 14:18:46

标签: scala dataframe apache-spark

所以,我在 Spark(scala) 中有 2 个列表。它们都包含相同数量的值。第一个列表 a 包含所有字符串,第二个列表 b 包含所有 Long 字符串。

a: List[String] = List("a", "b", "c", "d")
b: List[Long] = List(17625182, 17625182, 1059731078, 100)

我还有一个如下定义的架构:

val schema2=StructType(
  Array(
    StructField("check_name", StringType, true),
    StructField("metric", DecimalType(38,0), true)
  )
)

将我的列表转换为具有架构 schema2 且列分别由 ab 组成的单个数据框的最佳方法是什么?

2 个答案:

答案 0 :(得分:3)

您可以创建一个 RDD[Row] 并使用给定的架构转换为 Spark 数据帧:

val df = spark.createDataFrame(
    sc.parallelize(a.zip(b).map(x => Row(x._1, BigDecimal(x._2)))), 
    schema2
)

df.show
+----------+----------+
|check_name|    metric|
+----------+----------+
|         a|  17625182|
|         b|  17625182|
|         c|1059731078|
|         d|       100|
+----------+----------+

答案 1 :(得分:0)

使用数据集:

import spark.implicits._
case class Schema2(a: String, b: Long)

val el = (a zip b) map { case (a, b) => Schema2(a, b)}
val df = spark.createDataset(el).toDF()