Python集成:如何在SAP HANA中创建表以与hana_ml.algorithms.pal一起使用
2020-09-09 01:46发布
点击此处---> 群内免费提供SAP练习系统(在群公告中)
加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)
嗨,
当我想在我的Python Jupyter Notebook中使用HANA 2中的表时,是否有任何先决条件? 我创建了普通的列表,并且在我要拟合模型时总是收到sqlscript错误:
那是Jupyter Notebook中的代码:
#导入语句 导入系统 从hdbcli导入dbapi 从hana_ml导入数据帧 从hana_ml.algorithms.pal导入树 从hana_ml.algorithms.pal导入指标 #建立连接 conn = dataframe.ConnectionContext('服务器',端口,'用户','密码') #创建HANA数据框(df)并指向该表。 titanic_train = conn.table(" TITANIC_TRAIN4",schema =" schema") #创建DecisionTreeClassifier实例并指定参数 rfc = trees.RandomForestClassifier(conn_context = conn,n_estimators = 3, max_features = 3,random_state = 2, split_threshold = 0.00001,calculate_oob = True, min_samples_leaf = 1,thread_ratio = 1.0) #将必要的功能存储在列表中,并调用fit方法来训练算法 功能= ['PCLASS','SIBSP','PARCH'] rfc.fit(titanic_train,features = features,label ='SURVIVED')
HANA数据帧的连接和创建工作正常。 但是,执行带有fit方法的最后一行时,出现以下错误:
尝试拟合随机森林模型时发生HANA错误。 追溯(最近一次通话): 文件" C:\ Users \ RobertAnglberger \ Anaconda3 \ lib \ site-packages \ hana_ml \ algorithms \ pal \ trees.py",第186行,适合 self._call_pal(" PAL_RANDOM_DECISION_TREES",*表) 文件" C:\ Users \ RobertAnglberger \ Anaconda3 \ lib \ site-packages \ hana_ml \ algorithms \ pal \ pal_base.py",第55行,位于_call_pal中 call_pal(self.conn_context,funcname,* tablenames) 在call_pal的第176行中,文件" C:\ Users \ RobertAnglberger \ Anaconda3 \ lib \ site-packages \ hana_ml \ algorithms \ pal \ pal_base.py" execute_logged(cur,call_string) 文件" C:\ Users \ RobertAnglberger \ Anaconda3 \ lib \ site-packages \ hana_ml \ ml_base.py",行297,在execute_logged中 cursor.execute(语句) 执行中的文件" C:\ Users \ RobertAnglberger \ Anaconda3 \ lib \ site-packages \ hdbcli \ dbapi.py",行348 ret = self .__ execute(运算) __execute中的文件" C:\ Users \ RobertAnglberger \ Anaconda3 \ lib \ site-packages \ hdbcli \ dbapi.py",第234行 ret = self .__ cursor.execute(操作,参数=参数,iscall = iscall,scrollable = self._scrollable) hdbcli.dbapi.Error:(2870,'SqlScript:AFL DESCRIBE失败-ANY-过程调用的无效表(输入表0:列0具有无效的SQL类型。)')
另一种格式的错误:
--------------------------------------------------- ---------------------------- 错误回溯(最近一次通话) <模块>中的15#将必要的特征存储在列表中,并调用fit方法来训练算法 16个功能= ['PCLASS','SIBSP','PARCH'] ---> 17 rfc.fit(titanic_train,features = features,label ='SURVIVED') 18 19#titanic_train.describe()。collect() 〜\ Anaconda3 \ lib \ site-packages \ hana_ml \ algorithms \ pal \ trees.py适合(自己,数据,键,功能,标签) 485因变量的名称。 默认为最后一列。 486""" -> 487超级(RandomForestClassifier,self).fit(数据,键,特征,标签) 488#pylint:disable =属性定义的外部初始化 第489章 〜\ Anaconda3 \ lib \ site-packages \ hana_ml \ algorithms \ pal \ trees.py适合(自己,数据,键,功能,标签) 184 self._create(Table(oob_err_tbl,oob_err_spec)) 185 self._create(Table(cm_tbl,cm_spec)) -> 186个self._call_pal(" PAL_RANDOM_DECISION_TREES",*表) 除dbapi.Error外为187: 188 msg ='尝试拟合随机森林模型时,HANA错误。 _call_pal中的〜\ Anaconda3 \ lib \ site-packages \ hana_ml \ algorithms \ pal \ pal_base.py(self,funcname,* tablenames) 53 54 def _call_pal(self,funcname,* tablenames): ---> 55 call_pal(self.conn_context,funcname,* tablenames) 56 57 def _call_pal_auto(self,funcname,* args): 〜\ Anaconda3 \ lib \ site-packages \ hana_ml \ algorithms \ pal \ pal_base.py在call_pal(conn,funcname,* tablenames)中 174 call_string ='{} \ n {} \ n {}'。format(header,arglines_string,footer) 175,其中conn.connection.cursor()为cur: -> 176 execute_logged(cur,call_string) 177 178个def anon_block_safe(*数据帧): 〜\ Anaconda3 \ lib \ site-packages \ hana_ml \ ml_base.py在execute_logged中(游标,语句) 295""" 296 logger.info("正在执行SQL:%s",语句) -> 297 cursor.execute(语句) 298 299 INTEGER =" INTEGER" 〜\ Anaconda3 \ lib \ site-packages \ hdbcli \ dbapi.py在execute(自身,操作,参数,**关键字) 346提高编程错误(0,"第一个参数必须是字符串") 347如果参数为None并且len(keywords)== 0: -> 348 ret = self .__ execute(操作) 第349章 350返回 〜\ Anaconda3 \ lib \ site-packages \ hdbcli \ dbapi.py __execute(自身,操作,参数) 232 iscall = self .__ iscalloperation(operation) 233#参数已经被检查为None或Tuple type。 -> 234 ret = self .__ cursor.execute(运算,参数=参数,iscall = iscall,scrollable = self._scrollable) 第235章 236返回ret 错误:(2870," SqlScript:AFL DESCRIBE失败-ANY过程调用的表无效(输入表0:列0具有无效的SQL类型。)")
SAP HANA中的表是否有问题? 我是否还需要一些类似于HANA中PAL过程调用的包装器或参数表? 还是您知道我可以如何进一步调查此问题的方法?
预先感谢
罗伯特
罗伯特你好,如果PAL找到不受支持的列类型,则可能会导致该消息。 使用Python包装器时,列类型仍必须与PAL算法所需的类型匹配。 例如,随机决策树支持INTEGER,DOUBLE,VARCHAR和NVARCHAR作为目标变量。 https://help.sap.com/viewer/2cfbc5cf2bbb14f028 /2.0.04/zh-CN/9ad576abab8f497ab2ade2b86c1ff61a.html
hana_ml数据框中的列类型也可以通过包装器进行强制转换。 然后可以将该数据框保存为HANA中的视图,并用作分类的来源。 df_pushdown = df_pushdown.cast('ENTITY_ID','INTEGER')
df_pushdown.save(where =(" ML"," MYVIEW"),table_type =" VIEW")
如果数据类型正确无误,请尝试将目标列移到数据框的末尾。
许多问候安德烈亚斯(Andreas)
非常感谢! 完美答案
一周热门 更多>