Package: ec-storage
ECEC存储（ec-storage）file源码文件目录（src/ecstorage）：__init__.pymathematics                 数学函数__init__.pygalois.py              伽罗华域运算generator_matrix.py    生成矩阵matrix_optimization.py   矩阵优化list.py           list格式计算rdd.py          rdd格式计算dataframe.py   dataframe格式计算（开发中）installpipinstallec-storagemanual导入模块ec-storage提供了适合三种数据格式的计算方式，分别为list、rdd、dataframe（开发中），根据需要选择其中一种即可importecstorage.listasecimportecstorage.rddasecimportecstorage.dataframeasec为了方便后续的书写，建议将导入ec-storage的list或rdd或dataframe命名为ec，如上述代码块所示生成校验块check_block=ec.reedsolomon(sc,data,m,generator_matrix)这个ec需要与上面选择的接口一致（选择list接口则可以去掉sc这个参数）恢复数据recover_data=ec.verify(data,check_block)recover_data 与 data 相同demolist格式# 本地文件夹测试导入# import sys# sys.path.append("/Users/caiwei/Documents/code/EC-dev/src")# 导入模块importecstorage.listasecimportnumpyasnpm=3#选择校验块个数generator_matrix='vander'#生成矩阵选择范德蒙德矩阵data=[1,0,0,8,6]#list格式数据k=len(data)check_block=ec.reedsolomon(data,m,generator_matrix)#生成校验块(list格式)# 测试（数据缺失个数+校验块缺失个数 <= m）data[0]=None# 缺失数据data[1]=Nonecheck_block[1]=None#校验块也可以缺失print(data)# 恢复数据recover_data=ec.verify(data,check_block,generator_matrix)#恢复数据(list格式)print(recover_data)#[1, 0, 0, 8, 6]RDD格式# #本地文件夹测试导入# import sys# sys.path.append("/Users/caiwei/Documents/code/EC-dev/src")# #统一python版本(有多个python版本的情况下)# import os# os.environ["PYSPARK_PYTHON"]="/Users/caiwei/opt/anaconda3/bin/python"# os.environ["PYSPARK_DRIVER_PYTHON"]="/Users/caiwei/opt/anaconda3/bin/python"# 导入必要的模块importecstorage.rddasecfrompysparkimportSparkContextfrompyspark.mllib.linalg.distributedimport*frompyspark.sqlimportSparkSessionfromecstorage.mathematics.matrix_optimizationimportsparseimportnumpyasnpm=3#校验块个数generator_matrix='vander'#生成矩阵选择范德蒙德矩阵# 创建spark sessionsc=SparkContext()spark=SparkSession(sc)# 数据data=np.arange(1,6,1)data=sc.parallelize(data)#数据转为rdd格式# 生成校验块check_block=ec.reedsolomon(sc,data,m,generator_matrix)# 测试（数据缺失个数+校验块缺失个数 <= m）data=list(np.arange(1,6,1))data[0]=None# 缺失数据（缺失个数小于等于m）data[1]=None# data[2] = None# 也可以是校验块有缺失数据check_block=check_block.collect()check_block[0]=Nonecheck_block=sc.parallelize(check_block)# 恢复数据recover_data=ec.verify(sc,data,check_block,generator_matrix)print(recover_data.collect())dataframe格式# 文件夹测试导入importsyssys.path.append("/Users/caiwei/Documents/code/EC-dev/src")# 导入模块importecstorage.dataframeasecfrompysparkimportSparkContextfrompyspark.mllib.linalg.distributedimport*frompyspark.sqlimportSparkSessionfromecstorage.mathematics.matrix_optimizationimportsparseimportnumpyasnpimportosos.environ["PYSPARK_PYTHON"]="/Users/caiwei/opt/anaconda3/bin/python"os.environ["PYSPARK_DRIVER_PYTHON"]="/Users/caiwei/opt/anaconda3/bin/python"frompyspark.sqlimportSQLContextm=3#生成校验块个数generator_matrix='vander'#生成矩阵选择范德蒙德矩阵sc=SparkContext()sqlContext=SQLContext(sc)dicts=[{'col1':'a','col2':1},{'col1':'b','col2':2},{'col1':'b','col2':3},{'col1':'b','col2':4},{'col1':'b','col2':5},]df=sqlContext.createDataFrame(dicts)data=df.select('col2')# data.show()check_block=ec.reedsolomon(sc,data,m)check_block.show()# 测试dicts=[{'col1':'a','col2':None},{'col1':'b','col2':None},{'col1':'b','col2':3},{'col1':'b','col2':4},{'col1':'b','col2':5},]# # data[2] = None# check_block = check_block.collect()# check_block[0] = None# check_block = sc.parallelize(check_block)data=sqlContext.createDataFrame(dicts)data=data.select('col2')data.show()# 恢复数据recover_data=ec.verify(sc,data,check_block,generator_matrix)recover_data.show()