如何从 Spark 数据框中提取 csv 名称

Wor*_*nch 2 python dataframe pyspark

我们的设置是 PySpark。假设我使用spark.read.csv函数创建一个数据框df,即

df = spark.read.csv("directory/name_file.csv")

现在我需要一种方法来提取“name_file”,当然无需手动复制和粘贴。换句话说,我想要一个仅包含字符串“name_file”的火花列表或数据帧。

请仅提供涉及与 PySpark 兼容的 PySpark SQL 或 Python 代码的解决方案。

这个问题看似简单,但我花了很多时间寻找解决方案却一无所获。

Ste*_*ven 5

有一个功能可以做到这一点: input_file_name 然后,你split

from pyspark.sql import functions as F

df = df.withColumn("path", F.input_file_name())
df = df.withColumn("path_splitted", F.split("path","/"))
df = df.withColumn("name", F.col("path_splitted").getItem(F.size("path_splitted")-1))

df.show()
+---+--------------+--------+----------------+
| id|          path|    name|   path_splitted|
+---+--------------+--------+----------------+
|  1|/foo/bar.csv  |bar.csv |[, foo, bar.csv]|
+---+--------------+--------+----------------+


Run Code Online (Sandbox Code Playgroud)

编辑:使用spark 2.4,您可以使用它reverse轻松获取最后一个元素

F.reverse("path_splitted").getItem(0)