2017-08-04 109 views
0

我有一組文件,每個文件都包含一個Marc21二進制格式的特定記錄。我想將這組文件作爲RDD接收,其中每個元素都將作爲二進制數據的記錄對象。稍後,我將使用一個Marc庫將對象轉換爲Java Object以供進一步處理。將二進制文件讀入Spark

截至目前,我對如何讀取二進制文件感到困惑。

我已經看到了以下功能:

binaryRecord(path: string, recordLength: int, conf) 

但是,假定它是與相同長度的多個記錄的文件。我的記錄將明確地具有不同的尺寸。在每個旁邊都有一個單獨的文件。

有沒有辦法解決這個問題?我怎樣才能爲每個文件,給一個長度?唯一的辦法只是計算我的文件的長度,然後閱讀記錄?

我明顯看到的另一種解決方案是以Java格式讀取記錄,並將其序列化爲任何適合攝取的格式。

請指教。

回答

0

你有沒有試過從火花sc.binaryFiles()?

這裏是鏈接到文件 https://spark.apache.org/docs/2.1.1/api/java/org/apache/spark/SparkContext.html#binaryFiles(java.lang.String,%20int)

+0

在這一點上,我不使用HDFS的。我在沒有HDFS的情況下在當地工作。將來我知道我會從卡夫卡讀書。在其他情況下,將在卡夫卡攝入,並從中消耗Spark。但現在我只想做一些測試。它可以工作沒有HDFS? – MaatDeamon

+0

是的。 sc.binaryFiles(「file:/// path/to/local/file」)應該可以工作。 – user5262448

+0

Thx是的,我明白它必須是Hadoop兼容而不是每個說Hdfs – MaatDeamon