PySpark input_file_name() 到变量 NOT df

PySpark input_file_name() into a variable NOT df

我想将 input_file_name() 的值存储到变量而不是数据帧中。此变量将用于日志记录和 troubleshooting.etc

您可以使用 withColumninput_file_name() 在数据框上创建一个新列,然后使用 collect() 操作,如下所示:

df = spark.read.csv("/FileStore/tmp/part-00000-tid-6847462229548084439-4a50d1c2-9b65-4756-9a29-0044d620a1da-11-1-c000.csv")
df.show()

+-----+
|  _c0|
+-----+
|43368|
+-----+

from pyspark.sql.functions import *

df1 = df.withColumn("file_name", input_file_name())
df1.show(truncate=False)

+-----+---------------------------------------------------------------------------------------------------------+
|_c0  |file_name                                                                                                |
+-----+---------------------------------------------------------------------------------------------------------+
|43368|dbfs:/FileStore/tmp/part-00000-tid-6847462229548084439-4a50d1c2-9b65-4756-9a29-0044d620a1da-11-1-c000.csv|
+-----+---------------------------------------------------------------------------------------------------------+

现在,使用 collect 创建一个带有 file_name 的变量,然后在 /

上拆分它
file_name = df1.collect()[0][1].split("/")[3]

print(file_name)

输出

part-00000-tid-6847462229548084439-4a50d1c2-9b65-4756-9a29-0044d620a1da-11-1-c000.csv

请注意,在您的案例中,collect 以及 split 之后的索引可能不同。