所以,我在 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
且列分别由 a
和 b
组成的单个数据框的最佳方法是什么?
答案 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()