【问题标题】:Pyspark string comparison with == for RDkit functions throws errorPyspark 字符串与 == 比较 RDkit 函数会引发错误
【发布时间】:2020-02-04 18:50:13
【问题描述】:

我有一个 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 之间的比较会引发错误。我为 convert_smile 打印了大约 20 个值,看起来不错。我们不能这样进行字符串比较吗?

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)

【问题讨论】:

    标签: pyspark rdkit


    【解决方案1】:

    替换

    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()
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-10-04
      • 2014-11-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-12-08
      相关资源
      最近更新 更多