我创建了一个以* .npy格式保存的numpy数组:
import numpy as np
a = np.arange(50)
np.save("/path/in/local/i.npy", a)
然后我将其保存到hdfs中:
hadoop fs -put /path/in/local/i.npy /path/in/hdfs/
现在,我正在尝试在PySpark中读取该数组以进行进一步处理:
rdd = sc.textFile("/path/in/hdfs/i.npy")
print(rdd)
print(rdd.glom().collect())
导致一堆unicode乱码被打印:
/path/in/hdfs/i.npy MapPartitionsRDD[11] at textFile at NativeMethodAccessorImpl.java:0
[[u"\ufffdNUMPY\x01\x00v\x00{'descr': '<f8', 'fortran_order': False, 'shape': (50,), } ", u'\x00\x00\x00\x00\u0182\ufffd\ufffd\x00\x00\x00\x00\ufffdL\ufffd\ufffd\x00\x00\x00\x00`\ucc7f\x00\x00\x00\x00\x08k\ufffd\ufffd\x00\x00\x00\x00\ufffd\u03a9\ufffd\x00\x00\x00\x00h\ufffd\ufffd\ufffd\x00\x00\x00\x00\ufffd_\ufffd\ufffd\x00\x00\x00\x00f\ufffd\ufffd\ufffd\x00\x00\x00\x00\ufffd\ufffd\ufffd\ufffd\x00\x00\x00\x00\ufffd\u4cbf\x00\x00\x00\x00\ufffd\\\ufffd\ufffd\x00\x00\x00\x00\ufffd\ufffd\ufffd\ufffd\x00\x00\x00\x00\ufffd2\ufffd\ufffd\x00\x00\x00\x00\ufffd\u0467\ufffd\x00\x00\x00\x00\ufffd{\ufffd\ufffd\x00\x00\x00\x00\ufffd\u453f\x00\x00\x00\x00 B\ufffd\ufffd\x00\x00\x00\x00\ufffd\ufffd\x7f\ufffd\x00\x00\x00\x00@B`\ufffd\x00\x00\x00\x00\x00IZ?\x00\x00\x00\x00\ufffd\ufffdo\ufffd\x00\x00\x00\x00\ufffd\ufffd\x7f\ufffd\x00\x00\x00\x00\ufffd\ub1ff\x00\x00\x00\x00\x10`\ufffd\ufffd\x00\x00\x00\x00`\x7f\ufffd\ufffd\x00\x00\x00\x00\x00\ufffdQ\ufffd\x00\x00\x00\x00\ufffd\ufffdp?\x00\x00\x00\x00\ufffd\x1e\ufffd?\x00\x00\x00\x00Pz\ufffd?\x00\x00\x00\x00\ufffd\ufffd?\x00\x00\x00\x00p/\ufffd?\x00\x00\x00\x00\ufffd\x16\ufffd?\x00\x00\x00\x00\ufffd\ufffd\x7f?\x00\x00\x00\x00\ufffd*v?\x00\x00\x00\x00\ufffd1P?\x00\x00\x00\x00@B`\ufffd\x00\x00\x00\x00@\x08e\ufffd\x00\x00\x00\x00\ufffd\ufffdk\ufffd\x00\x00\x00\x00\ufffd\ufffdj\ufffd\x00\x00\x00\x00\x00_n\ufffd\x00\x00\x00\x00@\ufffdt\ufffd\x00\x00\x00\x00\ufffd\u0441\ufffd\x00\x00\x00\x00\ufffd\x19\ufffd\ufffd\x00\x00\x00\x00`\ufffd|\ufffd\x00\x00\x00\x00\ufffd\ufffd\x7f\ufffd\x00\x00\x00\x00@\ufffd\ufffd\ufffd\x00\x00\x00\x00\ufffdx\ufffd\ufffd\x00\x00\x00\x00\ufffd\u0491\ufffd\x00\x00\x00\x000\ufffd\ufffd\ufffd\x00\x00\x00\x00P\ufffd\ufffd\ufffd']]
我还尝试了numpy加载和fromfile方法:
print(rdd.map(lambda x: np.load(x)).collect())
print(rdd.map(lambda x: np.fromfile(x)).collect())
但是它们都导致了unicode错误:
TypeError: file() argument 1 must be encoded string without null bytes, not unicode
人们如何将这个numpy数组作为RDD中的单个数组读取?
谢谢!