Spark - 如何从数据框列中获取带有父文件夹的文件名

Spark - how to get filename with parent folder from dataframe column

我正在使用 pyspark 作为代码语言。我添加了列以获取带路径的文件名。

from pyspark.sql.functions import input_file_name
data = data.withColumn("sourcefile",input_file_name())

我只想从此列中检索文件名及其父文件夹。请帮忙。

示例:

Inputfilename = "adl://dotdot.com/ingest/marketing/abc.json"

我正在寻找的输出是:

marketing/abc.json

注:字符串操作我会。文件路径列是数据框的一部分。

我认为您正在寻找的是:

sc.wholeTextFiles('path/to/files').map(
    lambda x : ( '/'.join(x[0].split('/')[-2:]), x[1])
)

这将创建一个包含 2 列的 rdd,第一个是 path to file,第二个是文件的内容。这是在 spark 中 link 路径和内容的唯一方法。 例如,Hive 中存在其他方法。

如果您想将值保留在数据框列中,您可以使用 pyspark.sql.function regexp_extract。您可以将它应用于具有路径值的列并传递提取所需部分所需的正则表达式:

data = data.withColumn("sourcefile",input_file_name())

regex_str = "[\/]([^\/]+[\/][^\/]+)$"
data = data.withColumn("sourcefile", regexp_extract("sourcefile",regex_str,1))