當你使用:
從pyspark進口SparkFiles spark.sparkContext.addFile (url)
它將文件添加到非dbfs / local_disk0 /但當你想讀文件:
spark.read.json (SparkFiles.get (“file_name”))
要從/ dbfs / local_disk0 /讀取它。我也試過用文件:/ /和許多其他創造性的方式,它不工作。
當然是工作在使用% sh cp -從/ local_disk0 / / dbfs / local_disk0 /。
這似乎是一個錯誤就像addFile轉向dbfs azure磚但SparkFiles不是(在原始火花addFile和到達/從工人)。
我也找不到任何設置手動指定SparkFiles RootDirectory。
閱讀文件添加通過addFile使用火花dataframe api不理想的工作在多節點集群的臨時目錄用於存儲這些文件將司機和執行人之間會有所不同。
SparkFiles.get (“file_name”)將返回的本地目錄路徑添加文件' / local_disk0 /火花- 3 - ff880e3 b9b4 - 4077 - a011 - 4 - ec3ae9d6037 / userFiles-c7e5e114-2aa2-42aa-aaf4-ab9edfe4b3a4 file_name”。運行spark.read.json (SparkFiles.get (“file_name”)會失敗因為默認URI模式是dbfs: /,它將解決非存在的路徑dbfs: / local_disk0 / xxxx。
運行spark.read.json(“文件:/ /”+ SparkFiles.get (“file_name”)通過添加文件:/ /模式解決輸入路徑會對司機臨時位置,這個特殊的路徑不會出現在執行人,再次失敗。這可能工作在單節點集群而不是多節點集群。
推薦的方法是將數據存儲在dbfs或其他支持存儲和使用各自的url來處理數據。
是的這個解決方案已經在stackoverflow討論。問題是,這種火花功能應調整DBR通過dbfs自動處理一切。問題是,似乎這是部分調整但不完全。