将Scala中的数组列表转换为 Dataframe ?

c2e8gylq  于 2022-11-09  发布在  Scala
关注(0)|答案(1)|浏览(326)

我是Scala的新手,我正在从URL读取一些CSV数据,而实际上并没有保存到CSV文件中。我将该数据存储到一个列表[数组[字符串]]中:
结果是一个只有一个名为“Value”的列的DF,列表中的每个数组都成为该列的一行,我尝试创建一个15列的DF,因为每个数组的长度都是15。对此有什么建议吗?

var stockURL: URL = null
    val spark: SparkSession = SparkSession.builder.master("local").getOrCreate
    import spark.implicits._
    val sc = spark.sparkContext
    try {
      stockURL = new URL("someurlimreadingfrom.com/asdf")
      val in: BufferedReader = new BufferedReader(new InputStreamReader(stockURL.openStream))
      val reader: CSVReader = new CSVReader(in)
      val allRows: List[Array[String]] = reader.readAll.asScala.toList
      val allRowsDF = sc.parallelize(allRows).toDF()
      allRowsDF.show
    } catch {
      case e: MalformedURLException =>
        e.printStackTrace()
      case e: IOException =>
        e.printStackTrace()
    }

由于数据的敏感性,我不得不隐藏URL和生成的DF,我很抱歉

qvtsj1bj

qvtsj1bj1#

如果我完全理解您的问题,我做了一段代码:
它适用于长度为3的数组,您可以很容易地将其扩展到15。

val allRows: List[Array[String]] =
  List(Array("a", "b", "c"), Array("a", "b", "c"))
val df1 = spark.sparkContext.parallelize(allRows).toDF()

df1
  .withColumn("col0", $"value".getItem(0))
  .withColumn("col1", $"value".getItem(1)).show()

相关问题