首页 > 解决方案 > 将 Array[(Any, (Any, Any))] 转换为具有 2 列的 spark 数据帧

问题描述

我有一个类型的数组Array[(Any, (Any, Any))],我想将其转换为火花dataframe,以便第一个值出现在第一列中,元组出现在第二列中。

标签: apache-sparkapache-spark-sql

解决方案


首先,DataFrame对象有一个强模式——你可以将你的RDDor隐式转换Seq为 a DataFrame,但它会将强模式附加到你的集合中。由于Anytype 只是一种说法,我不知道我的 type 是什么,因此您必须先将其强制转换为某种特定类型,然后才能使其成为 a 的一部分DataFrame

假设您将所有内容转换为String

import spark.implicits._
val df  = Array.empty[(Any, (Any, Any))]
  .map{case (first, (second, third)) => 
       (first.toString, (second.toString, third.toString))
  }.toSeq.toDF

df.printSchema

root
 |-- _1: string (nullable = true)   
 |-- _2: struct (nullable = true)  
 |    |-- _1: string (nullable = true)
 |    |-- _2: string (nullable = true)

推荐阅读