use*_*842 0 loops scala apache-spark
我有一个包含 100 多个子目录的目录。每个子目录都有一个文本文件。我想编写一个 Spark/scala 代码,将子目录名称附加到其中文件中的每个记录。
例如。
包含 /parent_dir/subdir1/file1->
abc|123
def|456
Run Code Online (Sandbox Code Playgroud)
包含 /parent_dir/subdir2/file1 ->
ghi|789
Run Code Online (Sandbox Code Playgroud)
包含 /parent_dir/subdir3/file1 ->
jkl|901
Run Code Online (Sandbox Code Playgroud)
所需的输出文件->
abc|123|subdir1
def|456|subdir1
ghi|789|subdir2
jkl|901|subdir3
Run Code Online (Sandbox Code Playgroud)
您可以作为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")
Run Code Online (Sandbox Code Playgroud)
现在您将数据作为数据框获取,其中包含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|
+--------------------------------+-------+
Run Code Online (Sandbox Code Playgroud)
现在您可以解析路径并仅获取所需的目录。
希望这可以帮助!
| 归档时间: |
|
| 查看次数: |
2995 次 |
| 最近记录: |