spark从多个列表/数组创建一个Dataframe

xuo3flqw  于 2021-07-12  发布在  Spark
关注(0)|答案(2)|浏览(412)

所以,我在spark(scala)中有两个列表。它们都包含相同数量的值。第一张单子 a 包含所有字符串和第二个列表 b 包含所有长的。

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)
  )
)

将列表转换为一个具有模式的Dataframe的最佳方法是什么 schema2 柱子是用 a 以及 b 分别?

ttcibm8c

ttcibm8c1#

您可以创建 RDD[Row] 并转换为具有给定模式的sparkDataframe:

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|
+----------+----------+
qqrboqgw

qqrboqgw2#

使用数据集:

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()

相关问题