Asi*_*sif 2 scala apache-spark
我有一个数据集,其中包含主文件夹内的多个文件夹,每个文件夹都包含多个 CSV 文件。每个 CSV 文件都有名为 X、Y 和 Z 的三列。我想创建一个数据框,以便数据框的前三列是三个 X、Y、Z。我想要另外两列,以便第四列包含从中读取 CSV 文件的文件夹的名称。第五列包含 CSV 文件的名称。如何在 Scala 和 Spark 中创建此数据框?
spark.read.csv然后您可以使用input_file_name来获取文件名并从文件名中提取目录。
Example:
1.extracting directory from filename:
// Lets take we have directory `tmp2` with folders having csv files in it
tmp2
|-folder1
|-folder2
//extracting directory from filename
spark.read.option("header",true).
csv("tmp2/*").
withColumn("file_name",input_file_name).
withColumn("directory",element_at(reverse(split(col("file_name"),"/")),2)).
show()
//+----+---+---------------------------+---------+
//|name|id |file_name |directory|
//+----+---+---------------------------+---------+
//|2 |b |file:///tmp2/folder2/t1.csv|folder2 |
//|1 |a |file:///tmp2/folder1/t.csv |folder1 |
//+----+---+---------------------------+---------+
Run Code Online (Sandbox Code Playgroud)
2. Get folder name while reading file:
如果您有这样的文件夹结构,folder=<val>那么 spark 将文件夹读取为分区列并添加folder为分区列。
//folder structure
tmp3
|-folder=1
|-folder=2
spark.read.
option("header",true).
csv("tmp3").\
withColumn("file_name",input_file_name).
show(false)
//+----+---+------+---------------------------+
//|name|id |folder|file_name |
//+----+---+------+---------------------------+
//|a |1 |2 |file:///tmp3/folder=2/t.txt|
//|a |1 |1 |file:///tmp3/folder=1/t.txt|
//+----+---+------+---------------------------+
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1911 次 |
| 最近记录: |