Сравнение строк Pyspark с == для функций RDkit выдает ошибку - PullRequest
1 голос
/ 04 февраля 2020

У меня есть Pyspark UDF, определенный как ниже -

from rdkit import Chem

input_smile = 'CCOC(=O)c1cc2cc(ccc2[nH]1)C(=O)O'
converted_smile_in = Chem.MolToSmiles(Chem.MolFromSmiles(input_smile)

def convertSmile(smile):
        return (Chem.MolToSmiles(Chem.MolFromSmiles(smile)))
applyconvertSmileUdf = udf(convertSmile)

data_converted = data_converted.withColumn("converted_smile", applyconvertSmileUdf(data_filtered.smiles))

if __name__ == "__main__": 
        # using the new approach
        data_converted.filter(data_converted.converted_smile == converted_smile_in ).select("id","smiles").show()
else:
        print("Cannot convert!")     

Сравнение между ошибками выбрасывания data_converted.converted_smile и convert_smile_in. Я напечатал около 20 значений для convert_smile, и это выглядит хорошо. Разве мы не можем сделать сравнение строк таким образом?

Boost. Python .ArgumentError: Python типы аргументов в rdkit.Chem.rdmolfiles.MolToSmiles (NoneType) не соответствуют сигнатуре C ++: MolToSmiles (RDKit :: ROMol mol, bool isomericSmiles = True, bool kekuleSmiles = False, int rootedAtAtom = -1, bool canonical = True, bool allBondsExplicit = False, bool allHsExplicit = False, bool doRandom = False)

1 Ответ

0 голосов
/ 04 февраля 2020

заменить

data_converted.filter(data_converted.converted_smile == converted_smile_in ).select("id","smiles").show()

на

from pyspark.sql.functions import lit

data_converted.filter(data_converted.converted_smile == lit(converted_smile_in) ).select("id","smiles").show()
...