我有下面的RDD,很多都喜欢。
val csv = sc.parallelize(Array(
"col1, col2, col3",
"1, cat, dog",
"2, bird, bee"))
我想将RDD转换为一个数据帧,在该数据帧中,将基于RDD的第一行动态/以编程方式创建模式。
我想将逻辑应用于多个类似的RDD,并且不能使用案例类以编程方式指定架构,也不能使用spark-csv从一开始就将数据加载为数据框。
我已经创建了一个展平的数据框,但是想知道在创建数据框时如何拆分各个列吗?
val header= csv.first()
val data = full_csv.mapPartitionsWithIndex {
(idx, iter) => if (idx == 0) iter.drop(1) else iter
}.toDF(header).show()
+----------------+
|col1, col2, col3|
+----------------+
| 1, cat, dog|
| 2, bird, bee|
+----------------+
[在大多数情况下,最好直接将csv文件作为数据帧读取,例如:Spark - load CSV file as DataFrame?。