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?