如何从头文件创建数据框架构

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)...从性能的角度来看会好吗? 您期望有多少个标题?收集性能不佳,但在您的用例中,我认为这是一个不错的选择并且不会产生影响。

以上是关于如何从头文件创建数据框架构的主要内容,如果未能解决你的问题,请参考以下文章

为每个文件创建一个包含架构数据的数据框

r 在控制台中从头开始创建数据框(或表)。

如何从另一个数据框创建转置数据框

hibernate 不在空数据库上创建模式

如何在分区文件上创建数据框

如何创建具有指定架构的空 DataFrame?