【问题标题】:Spark create a dataframe from multiple lists/arraysSpark 从多个列表/数组创建数据框
【发布时间】:2021-03-15 22:38:11
【问题描述】:

所以,我在 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 组成?

【问题讨论】:

    标签: scala dataframe apache-spark


    【解决方案1】:

    您可以创建一个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|
    +----------+----------+
    

    【讨论】:

      【解决方案2】:

      使用数据集:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2020-10-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-12-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多