pyspark 加载多个json文件并添加路径名作为列

hujrc8aj  于 2023-05-16  发布在  Spark
关注(0)|答案(1)|浏览(167)

我目前正在使用以下代码将my_folder中的所有json文件加载到spark DataFrame中:

data = spark.read.option("multiline", "true").json("/path/my_folder")

包含两个json文件的示例:

  • 文件名1:aaa.json
  • filename2:bbb.json

我得到以下DataFrame:
| 名字|姓|
| --------------|--------------|
| 杰克|巴黎|
| 约翰|先前|
| 尼克|对|
| 路易斯|坑|
| 乔治|派斯|
现在我想将每个文件的名称保存到一个附加列中:

  • 文件名1:aaa.json
  • filename2:bbb.json

获取以下DataFrame:
| 名字|姓|文件名|
| --------------|--------------|--------------|
| 杰克|巴黎| aaa.json |
| 约翰|先前| aaa.json |
| 尼克|对| aaa.json |
| 路易斯|坑| bbb.json |
| 乔治|派斯| bbb.json |
我有太多的文件,不能一个接一个地循环。还有别的办法吗

5sxhfpxr

5sxhfpxr1#

你可以像这样使用input_file_name()pyspark函数:

import pyspark.sql.functions as f

json_file = spark.read.option("multiline", "true").json("/FileStore/tables/dummy_file-4.json")

new_df = json_file.withColumn('filename', f.input_file_name())

new_df.show(5, False)

+----------+---------+----------------------------------------+
|first_name|last_name|filename                                |
+----------+---------+----------------------------------------+
|Jack      |Paris    |dbfs:/FileStore/tables/dummy_file-4.json|
+----------+---------+----------------------------------------+

相关问题