在带有包含路径和文件名的字符串列的数据框中(分隔符是反斜杠),我试图将其拆分并获取作为新列的文件名的最后一项。我使用的这段代码如下:
Id | 路径 |
---|---|
1 | C:\Program Files\Notepad++\notepad.exe |
2 | C:\Program Files (x86)\Google\Chrome\Application\chrome.exe |
3 | C:\Windows\SysWOW64\cmd.exe |
4 | C:\Program Files\Microsoft Office\root\Office16\WINWORD.EXE |
5 | C:\Program Files\Microsoft Office\root\Office16\EXCEL.EXE |
df = df.withColumn("filename", f.split(f.col("path"), "\\").getItem(-1))
预期输出:
Id | 路径 | 文件名 |
---|---|---|
1 | C:\Program Files\Notepad++\notepad.exe |
记事本.exe |
2 | C:\Program Files (x86)\Google\Chrome\Application\chrome.exe |
chrome.exe |
3 | C:\Windows\SysWOW64\cmd.exe |
cmd.exe |
4 | C:\Program Files\Microsoft Office\root\Office16\WINWORD.EXE |
WINWORD.EXE |
5 | C:\Program Files\Microsoft Office\root\Office16\EXCEL.EXE |
EXCEL |
但是,我在 Pyspark 中遇到运行时错误。我最初的猜测是用数据中的双反斜杠替换所有反斜杠,但这没有任何区别。感谢您对解决此问题的任何帮助。
答案 0 :(得分:1)
使用正则表达式提取。提取 alphanumerics.alphanumerics
和字符串结尾之间的值 \
df=df.withColumn('filename', regexp_extract(col('path'), '((?<=\\\)\w+\.\w+(?=$))', 1))
+---+-----------------------------------------------------------+-----------+
|Id |path |filename |
+---+-----------------------------------------------------------+-----------+
|1 |C:\Program Files\Notepad++\notepad.exe |notepad.exe|
|2 |C:\Program Files (x86)\Google\Chrome\Application\chrome.exe|chrome.exe |
|3 |C:\Windows\SysWOW64\cmd.exe |cmd.exe |
|4 |C:\Program Files\Microsoft Office\root\Office16\WINWORD.EXE|WINWORD.EXE|
|5 |C:\Program Files\Microsoft Office\root\Office16\EXCEL.EXE |EXCEL.EXE |
+---+-----------------------------------------------------------+-----------+
答案 1 :(得分:1)
需要四个反斜杠,因为每个级别的解析都需要重复转义(Python 然后是 Spark):
df.withColumn("filename", f.element_at(f.split(f.col("path"), "\\\\"), -1)).show(truncate=False)
+---+-----------------------------------------------------------+-----------+
|Id |path |filename |
+---+-----------------------------------------------------------+-----------+
|1 |C:\Program Files\Notepad++\notepad.exe |notepad.exe|
|2 |C:\Program Files (x86)\Google\Chrome\Application\chrome.exe|chrome.exe |
|3 |C:\Windows\SysWOW64\cmd.exe |cmd.exe |
|4 |C:\Program Files\Microsoft Office\root\Office16\WINWORD.EXE|WINWORD.EXE|
|5 |C:\Program Files\Microsoft Office\root\Office16\EXCEL.EXE |EXCEL.EXE |
+---+-----------------------------------------------------------+-----------+