【发布时间】:2020-03-14 11:32:09
【问题描述】:
我有以下 RDD,很多人都喜欢它:
val csv = sc.parallelize(Array(
"col1, col2, col3",
"1, cat, dog",
"2, bird, bee"))
我想将 RDD 转换为数据帧,其中架构是基于 RDD 的第一行动态/以编程方式创建的。
我想将该逻辑应用于多个类似的 RDD,并且不能使用案例类以编程方式指定架构,也不能使用 spark-csv 从一开始就将数据作为数据框加载。
我创建了一个扁平化的数据框,但想知道在创建数据框时如何拆分各个列?
当前代码:
val header= file.first()
val data = file.mapPartitionsWithIndex {
(idx, iter) => if (idx == 0) iter.drop(1) else iter
}.toDF(header).show()
当前输出:
+----------------+
|col1, col2, col3|
+----------------+
| 1, cat, dog|
| 2, bird, bee|
+----------------+
【问题讨论】:
-
如果这是来自 csv 文件,则直接将其作为数据帧读取:stackoverflow.com/questions/29704333/…
-
我无法使用 spark-csv 将其直接读入数据帧
-
怎么回事?另请注意,在较新的 spark 版本中,无需使用 spark-csv,因为它可以直接使用而无需额外的包,例如:
spark.read.format("csv").option("header", "true").load("csvfile.csv")。 -
是的,我就是这个意思。有一些限制,我不能这样做
标签: scala dataframe apache-spark apache-spark-sql rdd