Spark:如何将具有多列的 RDD 转换为数据框

Posted

技术标签:

【中文标题】Spark:如何将具有多列的 RDD 转换为数据框【英文标题】:Spark: How to convert RDD with many columns into a Data Frame 【发布时间】:2016-08-12 10:52:04 【问题描述】:

我已使用案例类将 RDD 转换为数据框,但我当前的数据有 700 列。我遇到过使用 structtypes 的提及,但我找不到示例。希望有人可以在这里分享一个例子。谢谢你。凯文

【问题讨论】:

如果您展示了一个可复制的示例来说明您想要的内容,将会有所帮助。 据我了解,您使用的是 Scala 对吗? How to convert rdd object to dataframe in spark的可能重复 您想为您的数据框创建一个动态架构? 【参考方案1】:

这是一个使用 structType 的示例输入示例:

a,1,2.0

b,2,3.0

import org.apache.spark.sql.Row
import org.apache.spark.sql.SQLContext
import org.apache.spark.sql.types.StructType
import org.apache.spark.sql.types.StructField
import org.apache.spark.sql.types.StringType
import org.apache.spark.sql.types.IntegerType
import org.apache.spark.sql.types.DoubleType

def getSchema(): StructType = 
val schema = new StructType(Array(
  StructField("col_a", StringType, nullable = true),
  StructField("col_b", IntegerType, nullable = true),
  StructField("col_c", DoubleType, nullable = true)
))
schema


val sqlContext = new org.apache.spark.sql.SQLContext(sc)
val rdd = sc.textFile("/tmp/test").map(m => m.split(",", -1)).map(m => Row(m(0),m(1).toInt,m(2).toDouble))
val df = sqlContext.createDataFrame(rdd, getSchema)
df.show
+-----+-----+-----+
|col_a|col_b|col_c|
+-----+-----+-----+
|    a|    1|  2.0|
|    b|    2|  3.0|
+-----+-----+-----+

【讨论】:

这正是 op 所要求的......不知道为什么人们不赞成。请留下评论/拒绝投票的原因。 感谢您的回答 hadooper。我不知道为什么人们投了反对票。使用案例类有很多答案,但仅限于约 20 列。我找不到有关使用该结构的明确示例,因此非常感谢您抽出宝贵时间回答我的问题。 - 凯文 如果您使用的是 scala 2.10,则案例类限制为 22 列。此限制已从 scala 2.11 中删除。因此,如果您想使用案例类,则必须使用 scala 2.11

以上是关于Spark:如何将具有多列的 RDD 转换为数据框的主要内容,如果未能解决你的问题,请参考以下文章

Spark:如何将多行转换为具有多列的单行?

将包含 BigInt 的 RDD 转换为 Spark Dataframe

如何将 spark 数据帧转换为 RDD 并获取词袋

如何将 RDD [GenericRecord] 转换为 scala 中的数据框?

Spark使用类将rdd转换为数据框

将 RDD 转换为 Dataframe Spark