Python集成:如何在SAP HANA中创建表以与hana_ml.algorithms.pal一起使用

2020-09-09 01:46发布

         点击此处--->   EasySAP.com群内免费提供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过程调用的包装器或参数表? 还是您知道我可以如何进一步调查此问题的方法?

预先感谢

罗伯特

         点击此处--->   EasySAP.com群内免费提供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过程调用的包装器或参数表? 还是您知道我可以如何进一步调查此问题的方法?

预先感谢

罗伯特

付费偷看设置
发送
2条回答
愤怒的猪头君
1楼 · 2020-09-09 02:27.采纳回答

罗伯特你好,如果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)

四川大学会员
2楼-- · 2020-09-09 02:38

非常感谢! 完美答案

一周热门 更多>