我正在尝试将一些代码从 Pandas 移植到 (py)Spark。不幸的是,我已经在输入部分失败了,我想在其中读取二进制数据并将其放入 Spark Dataframe。
到目前为止,我正在使用fromfilenumpy:
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)
Run Code Online (Sandbox Code Playgroud)
但是对于 Spark,我找不到如何去做。到目前为止,我的解决方法是使用 csv-Files 而不是二进制文件,但这不是理想的解决方案。我知道我不应该将 numpyfromfile与 spark 一起使用。如何读取已加载到 hdfs 中的二进制文件?
我试过类似的东西
fileRDD=sc.parallelize(['hdfs:///user/bin_file1.bin','hdfs:///user/bin_file2.bin])
fileRDD.map(lambda x: ???)
Run Code Online (Sandbox Code Playgroud)
但它给了我一个No such file or directory错误。
我见过这个问题: spark in python: create an rdd by loading binary data with numpy.fromfile 但这只适用于我将文件存储在驱动程序节点的家中。
我有一个具有以下结构的数据框
idx value Formula_name
0 123456789 100 Frequency No4
1 123456789 150 Frequency No25
2 123456789 125 Frequency No27
3 123456789 0.2 Power Level No4
4 123456789 0.5 Power Level No25
5 123456789 -1.0 Power Level No27
6 123456789 32 SNR No4
7 123456789 35 SNR No25
8 123456789 37 SNR No27
9 111222333 ...
Run Code Online (Sandbox Code Playgroud)
因此,将频率与其相应的度量相关联的唯一方法是通过频率的编号。我知道可能的范围(从 100 到 200 MHz,步长为 25 MHz),但不知道数据中显示了哪些频率(或多少个),也不知道使用哪个“数字”将频率与度量相关联。
我想得到一个类似的数据框:
SNR Power Level
idx 100 125 150 175 200 100 125 150 175 200
0 123456789 32 …Run Code Online (Sandbox Code Playgroud)