[英]Get the subfolder as a column while reading multiple parquet files with SparkSQL
我想为使用 SparkSQL 从镶木地板文件加载的每个 DataFrame 添加一列,以添加文件路径的 substring,然后使其成为单个 DataFrame。
例如,当加载.../subfolder1/my_parquet_file1.parquet
和.../subfolder2/my_parquet_file2.parquet
,我希望得到以下最终 DataFrame:
col1 | col2 | subfolder
------------------------
aaa | bbb | subfolder1
ccc | ddd | subfolder1
eee | fff | subfolder2
ggg | hhh | subfolder2
以下代码允许加载路径列表中的所有文件:
sqlContext.read.schema(schema).parquet(paths: _*)
但是通过直接获得最终的 DataFrame 我无法根据每行的来源添加子文件夹。
有没有办法在不顺序加载每个文件的情况下做到这一点?
尝试这个 -
val df = spark.read
.parquet(
getClass.getResource("/parquet/day/day1/part-00000-4ece3595-e410-4301-aefd-431cd1debf91-c000.snappy.parquet")
.getPath,
getClass.getResource("/parquet/day/day2/part-00000-4ece3595-e410-4301-aefd-431cd1debf91-c000.snappy.parquet")
.getPath
)
df.show(false)
df.printSchema()
/**
* +------+
* |price |
* +------+
* |123.15|
* |123.15|
* +------+
*
* root
* |-- price: decimal(5,2) (nullable = true)
*/
df.withColumn("subfolder", element_at(split(input_file_name(), "/"), -2))
.show(false)
/**
* +------+---------+
* |price |subfolder|
* +------+---------+
* |123.15|day1 |
* |123.15|day2 |
* +------+---------+
*/
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.