通过数学运算来组合火花数据帧中的行/列

时间:2015-05-04 20:26:13

标签: apache-spark pyspark apache-spark-sql apache-spark-mllib

我有两个火花数据帧(A和B),各自的大小为x x和b x m,包含浮点值。 另外,每个数据帧都有一个列'ID',即一个字符串标识符。 A和B具有完全相同的'ID'(即包含有关同一组客户的信息)。

我想通过某种功能将A列和B列组合在一起。 更具体地说,我想构建一个带有B列的A列的标量产品,并根据ID对列进行排序。 更具体地说,我想计算A和B列之间的相关性。 对所有列对执行此操作将与矩阵乘法相同:A_transposed x B. 但是,现在我只对一小部分对的相关性感兴趣。

我有两种方法,但我很难实现它们。 (并且根本不知道是否可行或可取。)

(1)取每个数据帧的感兴趣的列,并将每个条目组合到一个键值对,其中键是ID。然后在两列键值对和随后的求和上使用reduceByKey()。

(2)取每个数据框的感兴趣的列,按其ID对其进行排序,将其转换为RDD(尚未弄清楚如何执行此操作)并简单地应用 来自pyspark.mllib.stat的Statistics.corr(rdd1,rdd2)。

我也想知道:在列上而不是行上操作通常是计算上优先的(因为火花数据帧是以柱状为导向的)还是没有区别?

1 个答案:

答案 0 :(得分:0)

从spark 1.4开始,如果你需要的只是pearson相关性,那么你可以这样:

cor = dfA.join(dfB, dfA.id == dfB.id, how='inner').select(dfA.value.alias('aval'), dfB.value.alias('bval')).corr('aval', 'bval')