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

时间:2019-11-16 14:07:11

标签: scala dataframe apache-spark apache-spark-sql

我有2个数据文件:

1个文件是头文件,其他文件是数据文件。 头文件有两列(ID,标签):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 个答案:

答案 0 :(得分:0)

StructType需要一个StructField数组,并且您使用的字段变量是RDD [String],因此收集 rdd来创建StructType。

from itertools import groupby

my_list = [['chr1', 65419, 65433], ['chr1', 65520, 65573], ['chr1', 69037, 71585], ['chr1', 69055, 70108], ['chr1', 137621, 139379],['chr2', 65419, 65433], ['chr2', 65520, 65573], ['chr2', 69037, 71585], ['chr3', 69055, 70108]]

f = lambda x: x[0]
for k, g in groupby(sorted(my_list, key=f), key=f):
    print(k, sum(x[2] - x[1] for x in g))

# chr1 5426
# chr2 2615
# chr3 1053