我有一个目录,其中包含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
答案 0 :(得分:1)
您可以将其读作text
个文件并获取path
文件,如下所示。
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
+--------------------------------+-------+
|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|
+--------------------------------+-------+
现在您可以解析路径并只获取所需的目录。
希望这有帮助!