如何从头文件创建数据框架构
Posted
技术标签:
【中文标题】如何从头文件创建数据框架构【英文标题】:How to Create data frame schema from a header file 【发布时间】:2019-11-16 14:07:11 【问题描述】:我有 2 个数据文件:
1个文件是头文件,另一个是数据文件。 头文件有 2 列(Id,Tags):header.txt
Id,Tags
现在我正在尝试从头文件中创建一个dataFrame Schema:(我必须实时使用这种方法,header.txt和data.txt中有1000列。所以,手动创建案例类1000 列是不可能的。
val dataFile=sparkSession.read.format("text").load("data.txt")
val headerFile=sparkSession.sparkContext.textFile("header.txt")
val fields=
headerFile.flatMap(x=>x.split(",")).map(fieldName=>StructField(fieldName,StringType,true))
val schema=StructType(fields)
但上面的行因 无法解析重载方法 StructType 而失败。
有人可以帮忙
【问题讨论】:
【参考方案1】:StructType 需要一个 StructField 数组,而您使用的 fields 变量是一个 RDD[String],因此 收集 rdd 来创建 StructType。
val fields= headerFile.flatMap(x=>x.split(","))
.map(fieldName=>StructField(fieldName,StringType,true))
val schema=StructType(fields.collect)
【讨论】:
非常感谢。它不会影响在实际生产中正确收集的性能吗?我做了:val headerFile=sparkSession.sparkContext.textFile("src/main/resources/header.txt").repartition(1)。是否进行了重新分区(1)...从性能的角度来看会好吗? 您期望有多少个标题?收集性能不佳,但在您的用例中,我认为这是一个不错的选择并且不会产生影响。以上是关于如何从头文件创建数据框架构的主要内容,如果未能解决你的问题,请参考以下文章