我有一个表格的RDD(id1,id2,得分)。顶部(5)行看起来像
# In[9]:
import numpy as np
import pandas as pd
# In[10]:
allchan = pd.read_csv('allchan.csv',delimiter = ' ')
# In[11]:
allchanarray = np.array(allchan)
# In[12]:
dfallchan = pd.DataFrame(allchanarray,range(1,578),dtype=float)
# In[13]:
v = pd.DataFrame(columns=range(0,29))
y = pd.DataFrame()
k = pd.DataFrame(columns=range(0,29))
# In[14]:
for n in range(0,29):
x = dfallchan[(dfallchan[0]>0) & (dfallchan[n]==0)][0]
y = y.append(x)
v = y.transpose()
k = v.count()
# In[15]:
v.columns=range(0,29)
k = k.values.reshape(1,29)
# In[16]:
v.to_excel("Chan1-OthersZeroVals.xlsx", index=False)
pd.DataFrame(k).to_excel("Chan1-OtherZeroCount.xlsx", index=False)
我想根据分数计算id2成员之间的相似度。我想使用RowMatrix.columnSimilarity,但我需要先将其转换为RowMatrix。我希望矩阵的结构为id1 x id2 - 即,从id1中创建一个行id,从id2中创建一个列id。
如果我的数据较小,我可以将其转换为Pyspark数据帧,然后使用像
这样的数据透视表[(41955624, 42044497, 3.913625989045223e-06),
(41955624, 42039940, 0.0001018890937469129),
(41955624, 42037797, 7.901647831291928e-05),
(41955624, 42011137, -0.00016191403038589588),
(41955624, 42006663, -0.0005302800991148567)]
但是那个拥有超过10,000个不同id2的borks,我还有更多。
天真 rdd_Mat = la.RowMatrix(红色) 将数据作为3列矩阵,这不是我想要的。
非常感谢。
答案 0 :(得分:1)
数据的结构更类似于CoordinateMatrix
的结构,它基本上是(long, long, float)
元组的RDD的包装器。因此,您可以非常轻松地从现有RDD创建CoordinetMatrix
。
from pyspark.mllib.linalg.distributed import CoordinateMatrix
cmat=CoordinateMatrix(yourRDD)
此外,由于您最初要求RowMatrix
,因此pyspark提供了一种在矩阵类型之间轻松转换的方法:
rmat=cmat.toRowMatrix()
为您提供所需的RowMatrix
。