2

我有两个分别具有浮点值的大小为a x m和b x m的火花数据帧(A和B)。 此外,每个数据帧都有一个'ID'列,这是一个字符串标识符。 A和B具有完全相同的一组“ID”(即包含关于同一组顾客的信息)。通过数学运算组合火花数据帧的行/列

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

我有两种方法,但我努力实现它们。 (并且不知道是否是可能的或者可取的)。

(1)获取每个数据帧的关注列,并将每个条目与键值对组合,其中键是ID。然后,在键值对的两列和随后的总和上使用reduceByKey()。 (2)取每个数据帧的感兴趣列,按照它的ID对它进行排序,将它投射到一个RDD(还没有弄清楚如何做到这一点),只需应用 Statistics.corr(rdd1,rdd2 )来自pyspark.mllib.stat。

另外我想知道:在列上而不是在行上操作(因为火花数据框是以列为导向的)是否一般在计算上更好?还是这没有什么区别?

+0

你的意思是你想'等于join'按客户ID这两个数据帧? –

+0

是的,我认为这将是实现我所寻找的一种方式。关于这一点,如果有人能评论我最后一个问题,我会很高兴。 – tammo

+0

在列上操作或在行上操作都是您的要求,我认为。在数据分析的情况下,表格很宽,即有很多列,但在处理单个查询时,只有很少数量的列(或字段)被认为是有用的,也许这就是“宁愿操作列'? –

回答

0

从火花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')