获取Spark Scala rdd/dataframe中所有文件和数据的路径
我有一个目录,其中有100多个子目录。每个子目录都有一个文本文件。我想编写一个spark/scala代码,将子目录名附加到其中文件中的每个记录 例如 包含/parent_dir/subdir1/file1->获取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
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|
+--------------------------------+-------+
现在,您可以解析路径并仅获取所需的目录
希望这有帮助