簡體   English   中英

從 Spark Databricks 文件系統填充屬性 Object

[英]Populate a Properties Object from Spark Databricks File System

TL:博士

有沒有辦法從 Databricks 文件系統中讀取 Scala/Java 屬性文件?
或者,有沒有辦法將 spark 數據幀 Rows 轉換為一組文本鍵/值對(Scala 會理解)?

完整問題:

屬性文件不是本地的,它位於 Databricks 集群上。 使用scala.io.Source庫時,嘗試從“dbfs:/”或“/dbfs”讀取文件失敗。 我的猜測是 Scala Source 無法識別 Databricks 文件系統的 URI(?)。

I'm able to read the file into a Spark Dataframe however, but attempts to populate a java.utils.Properties object fail with an error that it doesn't accept the Spark Dataframe "ROW" type. 我嘗試將數據框更改為數組和列表,但遇到了相同的類型不匹配。 例如, java.util.List[org.apache.spark.sql.Row]是將數據幀轉換為列表時得到的。 我猜這意味着dataFrameObject.collectAsList()制作了一個火花行列表,而不是鍵/值對的文本列表。

顯然我是 Scala 的新手......如果沒有辦法直接從 DBFS 讀取/加載我的屬性文件,有沒有辦法將 spark Row 轉換為鍵/值對或字節流?

干杯和感謝,西蒙

如果您使用的是完整版的 Databricks,而不是社區版,那么您應該能夠通過/dbfs/_the_rest_of_your_path_without_dbfs:/_...訪問 DBFS 上的文件

但是,如果您無法訪問/dbfs/... ,那么您仍然可以按以下方式加載屬性:

  1. 使用將文件中的每一行轉換為單獨行的text格式將文件加載到 Spark
  2. 從該行創建文本 - 首先將所有行收集到驅動程序節點,然后從行中提取字符串(使用.getString(0)獲取行的第一個元素),然后使用mkString將所有行合並在一起
  3. 為該文本創建閱讀器
  4. 創建屬性 object 並從閱讀器加載數據(使用后不要忘記關閉閱讀器):
val path_to_file = "dbfs:/something...."
val df = spark.read.format("text").load(path_to_file)
val allTextg = df.collect().map(_.getString(0)).mkString("\n")
val reader = new java.io.StringReader(allText)
val props = new java.util.Properties()
props.load(reader)
reader.close()

您可以檢查是否已加載屬性

props.list(System.out)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM