【发布时间】:2020-01-29 07:59:49
【问题描述】:
我有 HMP dataset。该数据集有 14 个不同的文件夹(类别),每个类别中都有多个 CSV 文件。
我想将所有 csv 文件中的数据读取到单个数据帧中。数据架构是
val Tschema = StructType(Array(
StructField("X", IntegerType, true),
StructField("Y", IntegerType, nullable = true),
StructField("Z", IntegerType, true)
))
我还想在数据框中再添加两列。第一列包含包含当前 CSV 的文件夹(类别)的名称,第二列包含 CSV 文件的名称。
我尝试了以下代码,但没有正常工作。
val path = System.getProperty("user.home") + "/Desktop/HMP/*" // Path to all categories
val df =spark.sparkContext.wholeTextFiles(path)
df.toDF().show(5 , false)
我的代码输出是
+----------------------------------------------------------------------+--------------------+
| _1| _2|
+----------------------------------------------------------------------+--------------------+
|Climb_stairs/Accelerometer-2012-06-06-14-13-20-climb_stairs-m7.txt |12 38 35 |
|Climb_stairs/Accelerometer-2012-06-06-14-13-20-climb_stairs-m7.txt |23 56 34 |
|Climb_stairs/Accelerometer-2012-06-06-14-13-20-climb_stairs-m7.txt |13 36 36 |
|Climb_stairs/Accelerometer-2012-06-06-14-13-20-climb_stairs-m7.txt |39 57 42 |
|Climb_stairs/Accelerometer-2012-06-06-14-13-20-climb_stairs-m7.txt |26 51 36 |
+----------------------------------------------------------------------+--------------------+
在 \ 之前的第一列 (_1) 是我想在单独的列 class 上的部分,其余部分将在来源列。 在 _2 部分我想应用我定义的模式。
我希望最终输出如下所示。
+---+---+---+--------------+---------------------+
| X| Y| Z| class| source|
+---+---+---+--------------+---------------------+
| 37| 34| 43| Climb_stairs|Accelerometer-2011...|
| 05| 39| 34| Climb_stairs|Accelerometer-2011...|
| 30| 53| 49| Climb_stairs|Accelerometer-2011...|
+---+---+---+-------------+----------------------+
【问题讨论】:
-
你可以添加dataframe .show(false) 选项来获得你想要的源
-
@MaheshGupta 是的,不会截断条目。但我想要上面提到的输出数据框(表)
-
@MaheshGupta 我已经更新了问题和代码,请立即查看
标签: scala apache-spark apache-spark-sql rdd