获取Spark Scala rdd/dataframe中所有文件和数据的路径

获取Spark Scala rdd/dataframe中所有文件和数据的路径,scala,loops,apache-spark,Scala,Loops,Apache Spark,我有一个目录,其中有100多个子目录。每个子目录都有一个文本文件。我想编写一个spark/scala代码,将子目录名附加到其中文件中的每个记录 例如 包含/parent_dir/subdir1/file1-> abc|123 def|456 包含/parent_dir/subdir2/file1-> ghi|789 包含/parent_dir/subdir3/file1-> jkl|901 所需的输出文件-> abc|123|subdir1 def|456|subdir1 ghi|7

我有一个目录,其中有100多个子目录。每个子目录都有一个文本文件。我想编写一个spark/scala代码,将子目录名附加到其中文件中的每个记录

例如

包含/parent_dir/subdir1/file1->

abc|123

def|456
包含/parent_dir/subdir2/file1->

ghi|789
包含/parent_dir/subdir3/file1->

jkl|901
所需的输出文件->

abc|123|subdir1

def|456|subdir1

ghi|789|subdir2

jkl|901|subdir3

您可以读取
文本
文件,并获得文件的
路径
,如下所示

import org.apache.spark.sql.functions.input_file_name
val spark = SparkSession
  .builder()
  .appName("Test App")
  .master("local[1]")
  .getOrCreate()
import spark.implicits._

val data = spark.read.text("/parent_dir/*")
  .select(input_file_name().as("path"), $"value")
现在,您可以将数据作为数据帧获取,该数据帧由文件的
path
data
as组成

+--------------------------------+-------+
|path                            |value  |
+--------------------------------+-------+
|file:///parent_dir/subdir1/file1|abc|123|
|file:///parent_dir/subdir1/file1|def|456|
|file:///parent_dir/subdir3/file1|jkl|901|
|file:///parent_dir/subdir2/file1|ghi|789|
+--------------------------------+-------+
现在,您可以解析路径并仅获取所需的目录

希望这有帮助