मेरे पास उपयोगकर्ताओं और वस्तुओं के बीच संबंधों से भरा एक बड़ा डेटाफ्रेम है, जैसे:

        item1  item2
user1       0      1
user2       1      0

और सभी जोड़ियों की समानता की समस्या को कुशलता से हल करना चाहते हैं।

मैंने देखा कि अगर मैं RowMatrix ऑब्जेक्ट के साथ काम कर रहा होता तो मैं pyspark.mllib मॉड्यूल की columnSimilarities विधि का उपयोग कर सकता था।

जैसा कि मैंने इसे DataFrame के साथ हल करने के लिए जो भी तरीका अपनाया है, वह काफी अक्षम लगता है, मैं अपने DataFrame से RowMatrix प्राप्त करने का सर्वोत्तम संभव तरीका जानना चाहता हूं।

या, सबसे अच्छे मामले में, अगर मुझे कुछ याद आ रहा है और DataFrame के साथ सभी-जोड़े समानता समस्या का सामना करने का एक बेहतर तरीका है, तो मुझे इसके बारे में सुनना अच्छा लगेगा।

1
manuhortet 25 अक्टूबर 2018, 18:14

2 जवाब

सबसे बढ़िया उत्तर

जैसा कि अन्य उत्तरों में बताया गया है, DataFrame को सीधे RowMatrix में बदलने का कोई तरीका नहीं है। आपको सबसे पहले एक RDD ऑब्जेक्ट प्राप्त करना होगा।

ऐसा करने के लिए पायथन पर:

your_rdd = your_dataframe.rdd.map(list)
your_rowmatrix = RowMatrix(your_rdd)
1
manuhortet 30 अक्टूबर 2018, 14:37

RowMatrix के बारे में थोड़ा पढ़ने के बाद, ऐसा लगता है कि आपको अपने dataframe को RDD में बदलने की जरूरत है।

ऐसा करने के लिए आप इसका उपयोग कर सकते हैं:

val rows = df.content.rdd.map{ case row =>
Vectors.dense(row.toSeq.toArray.map{
    x => x.asInstanceOf[Integer]
  })
}.collect

फिर अपने कोड में rows का प्रयोग करें।

मुझे आशा है कि यह मददगार है।

0
Khelifi Aymen 30 अक्टूबर 2018, 01:08