我们可以使用
Spark
SQL
的StructType和StructField来定义一个包含多个字段的结构体类型,然后将RDD映射结果中的多列数据转换成该结构体类型,最后使用toDF()方法将该结构体类型转换为DataFrame。
示例代码如下:
import org.apache.
spark
.
sql
.types.{StructType, StructField, StringType}
import org.apache.
spark
.
sql
.Row
// 定义包含多个字段的结构体类型
val structType = StructType(
StructField("col1", StringType, true) ::
StructField("col2", StringType, true) ::
StructField("col3", StringType, true) :: Nil)
// 模拟RDD映射出的结果
val rdd = sc.parallelize(Seq(("value1", "value2", "value3"), ("value4", "value5", "value6")))
// 将RDD映射结果中的每一行转换为Row对象
val rows = rdd.map{ c
as
e (col1, col2, col3) => Row(col1, col2, col3) }
// 将Row对象集合转换为DataFrame
val df =
spark
.
cr
eateDataFrame(rows, structType)
// 打印DataFrame结果集
df.show()
输出结果:
+------+------+------+
| col1| col2| col3|
+------+------+------+
|value1|value2|value3|
|value4|value5|value6|
+------+------+------+