Spark - 如何从dataframe列获取带有父文件夹的文件名

时间:2018-05-17 12:57:12

标签: azure apache-spark pyspark hdinsight

我使用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

注意:字符串操作我可以做。 filepath列是dataframe的一部分。

2 个答案:

答案 0 :(得分:3)

如果要将值保留在dataframe列中,可以使用pyspark.sql.function regexp_extract。您可以使用path的值将其应用于列,并传递提取所需部分所需的正则表达式:

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

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

答案 1 :(得分:0)

我认为您正在寻找的是:

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

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