如何将Pandas UDF应用到大型矩阵数据框

时间:2019-08-02 01:38:20

标签: python pandas pyspark apache-spark-sql user-defined-functions

我真的是Spark和Pandas的新手。我想对没有任何列名的numpy.ndarray大矩阵应用pandas UDF。我应该如何定义UDF函数的输入?

这就是我所做的。 row是cassandra数据库中的一行,“ b2”是数据库中图像的列名。

def normalize_i(I):
    iI=I
    minI=20#np.min(I)
    maxI=50#np.max(I)
    minO=0
    maxO=255
    iI = (256.0/65536)*iI
    io=(iI-minI)*(((maxO-minO)/(maxI-minI))+minO)
    return io

b2 = cPickle.loads(row.asDict()['b2'], encoding='bytes')
pdf = pd.DataFrame(b2,columns=["x"])
dfb2 = spark.createDataFrame(pdf)
dfb2.select(normalize_i(col("x")))

符合预期 pd.DataFrame(b2,columns=["x"]) 由于b2是array的数组,因此返回错误: ValueError:传递的值的形状为(324,324),索引表示为(324,1)

如何定义数据框的列名以及函数的输入?

任何评论将不胜感激。 谢谢

1 个答案:

答案 0 :(得分:0)

您能详细说明pdf的外观吗?

如果b2为324x324,我想您应该给324列名称:

columns = ['x'+str(i) for i in range(b2.shape[1])]