Я создал пустой массив, который я сохранил в формате * .npy:
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())
приводит к печати множества юникодных слов:
/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 load и 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
Как можно было бы прочитать этот массивный массив как отдельный массив в СДР?
Спасибо!