我使用rdd.collect()创建了一个数组,现在我想使用这个数组[strings]创建一个Dataframe。我的测试文件采用以下格式(用管道|分隔)。
TimeStamp
IdC
Name
FileName
Start-0f-fields
column01
column02
column03
column04
column05
column06
column07
column08
column010
column11
End-of-fields
Start-of-data
G0002B|0|13|IS|LS|Xys|Xyz|12|23|48|
G0002A|0|13|IS|LS|Xys|Xyz|12|23|45|
G0002x|0|13|IS|LS|Xys|Xyz|12|23|48|
G0002C|0|13|IS|LS|Xys|Xyz|12|23|48|
End-of-data
document
列名介于字段开头和字段结尾之间。我想将“|”管道存储在Dataframe的不同列中。
如以下示例:
column01 column02 column03 column04 column05 column06 column07 column08 column010 column11
G0002C 0 13 IS LS Xys Xyz 12 23 48
G0002x 0 13 LS MS Xys Xyz 14 300 400
我的代码:
val rdd = sc.textFile("the above text file")
val columns = rdd.collect.slice(5,16).mkString(",") // it will hold columnnames
val data = rdd.collect.slice(5,16)
val rdd1 = sc.parallelize(rdd.collect())
val df = rdd1.toDf(columns)
但这并没有给我上述所需的Dataframe
2条答案
按热度按时间xqnpmsa81#
如果列的数量和列的名称是固定的,则可以按以下方式执行:
您可以看到如下输出:

hsvhsicv2#
你能试试这个吗?
打电话
spark.read...csv()
没有模式的方法,可能需要很长时间处理大量数据,因为模式推理(例如。附加读数)。在这种情况下,您可以如下所示指定模式。