Вычислить сходство между каждым элементом в rdd, со всеми другими элементами - PullRequest
0 голосов
/ 20 апреля 2020
from pyspark import SparkConf, SparkContext
from rdkit import Chem
from rdkit import DataStructs
from rdkit.Chem import AllChem
from rdkit.Chem import MACCSkeys


def parseLine(line): #get the names from the csv file
    fields = line.split('\t')
    canonical_smiles = fields[1]
    return canonical_smiles

def transform(smile):
    m1 = Chem.MolFromSmiles(smile)
    fp1_4 = AllChem.GetMorganFingerprint(m1,2)
    return fp1_4

#set the configuartion
conf = SparkConf().setMaster("local").setAppName("Similarity")
sc = SparkContext(conf = conf)

lines = sc.textFile("PS22_smiles_only_3.tsv") #loads the data
all_data = lines.map(parseLine) #method

similarity_fcp4 = all_data.map(similarity) #method

results = similarity_fcp4.collect() #action

for result in results:
    print(result)

Пока это мой код. Он читает файл TSV, а затем преобразует каждую строку столбца на основе отпечатка ecfp4. Я застрял на том, как сравнить каждый элемент rdd со всеми другими элементами. В простом python мой код был для l oop, в котором я сделал

for j in range(i+1,  df.shape[0]):
    fp2_4 = AllChem.GetMorganFingerprint(m2,2)
    sim_ecfp4 = DataStructs.DiceSimilarity(fp1_4,fp2_4)

Как я мог сделать это в pyspark?

...