我想將一些代碼從熊貓移植到(py)Spark。不幸的是,我已經失敗了輸入部分,我想讀取二進制數據並將其放入Spark Dataframe。如何從hdfs將二進制文件讀入Spark數據框?
到目前爲止,我使用fromfile
從numpy的:
dt = np.dtype([('val1', '<i4'),('val2','<i4'),('val3','<i4'),('val4','f8')])
data = np.fromfile('binary_file.bin', dtype=dt)
data=data[1:] #throw away header
df_bin = pd.DataFrame(data, columns=data.dtype.names)
但對於星火我找不到如何做到這一點。到目前爲止,我的解決方法是使用csv-Files而不是二進制文件,但這不是理想的解決方案。我知道我不應該用火花來使用numpy的fromfile
。 如何讀取已加載到hdfs中的二進制文件?
我想是這樣
fileRDD=sc.parallelize(['hdfs:///user/bin_file1.bin','hdfs:///user/bin_file2.bin])
fileRDD.map(lambda x: ???)
但它給我一個No such file or directory
錯誤。
我看到這個問題: spark in python: creating an rdd by loading binary data with numpy.fromfile 但只有當我有文件存儲在驅動程序節點的家中才有效。
fs.defaultFS說nameservice1,而且還與'HDFS :// nameservice1:8020/user/bin_file1.bin'我仍然收到文件未找到錯誤。 它可以與我放在地圖中的功能鏈接? 'DEF read_bin: 張開( 「MYFILE」, 「RB」)爲f: 字節= f.read(1) 而字節= 「」: 字節= f.read(1)' – WilliamEllisWebb
在哪個行你有沒有找到「文件未找到錯誤」?你打算如何使用「read_bin」函數?打開的方法似乎不適用於HDFS .... – Yaron
錯誤位於read_bin的第2行。你是對的,開放的方法不喜歡HDFS。我正在尋找類似於'sc.textfile(filename).map(lambda line:line.split(','))。map(lambda x:(int(x [0],int(x [1] ....)' – WilliamEllisWebb