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

时间:2018-04-20 03:47:02

标签: 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|789|subdir2

jkl|901|subdir3

1 个答案:

答案 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|
+--------------------------------+-------+

现在您可以解析路径并只获取所需的目录。

希望这有帮助!