Pred generates a Python program for predict a xgboost model.
(predStmt *ir.PredictStmt, session *pb.Session)
| 345 | |
| 346 | // Pred generates a Python program for predict a xgboost model. |
| 347 | func Pred(predStmt *ir.PredictStmt, session *pb.Session) (string, error) { |
| 348 | featureColumnCode, featureFieldDesc, trainLabelFieldDesc, err := deriveFeatureColumnCodeAndFieldDescs(predStmt.TrainStmt.Features["feature_columns"], predStmt.TrainStmt.Label) |
| 349 | |
| 350 | // predict output column name may be different to the column name used when training. |
| 351 | resultFieldDesc := &ir.FieldDesc{ |
| 352 | Name: predStmt.ResultColumn, |
| 353 | DType: trainLabelFieldDesc.DType, |
| 354 | Delimiter: trainLabelFieldDesc.Delimiter, |
| 355 | Format: trainLabelFieldDesc.Format, |
| 356 | Shape: trainLabelFieldDesc.Shape, |
| 357 | IsSparse: trainLabelFieldDesc.IsSparse, |
| 358 | Vocabulary: trainLabelFieldDesc.Vocabulary, |
| 359 | MaxID: trainLabelFieldDesc.MaxID, |
| 360 | } |
| 361 | |
| 362 | if err != nil { |
| 363 | return "", err |
| 364 | } |
| 365 | f, fs, err := resolveFeatureMeta(featureFieldDesc) |
| 366 | if err != nil { |
| 367 | return "", err |
| 368 | } |
| 369 | trainLabelJSON, err := json.Marshal(resolveFieldMeta(&trainLabelFieldDesc)) |
| 370 | if err != nil { |
| 371 | return "", err |
| 372 | } |
| 373 | predLabelJSON, err := json.Marshal(resolveFieldMeta(resultFieldDesc)) |
| 374 | if err != nil { |
| 375 | return "", err |
| 376 | } |
| 377 | |
| 378 | paiPredictTable := "" |
| 379 | if tf.IsPAI() && predStmt.TmpPredictTable != "" { |
| 380 | paiPredictTable = predStmt.TmpPredictTable |
| 381 | } |
| 382 | |
| 383 | r := predFiller{ |
| 384 | DataSource: session.DbConnStr, |
| 385 | PredSelect: predStmt.Select, |
| 386 | FeatureMetaJSON: string(f), |
| 387 | FeatureColumnNames: fs, |
| 388 | FeatureColumnCode: featureColumnCode, |
| 389 | TrainLabelMetaJSON: string(trainLabelJSON), |
| 390 | PredLabelMetaJSON: string(predLabelJSON), |
| 391 | ResultTable: predStmt.ResultTable, |
| 392 | HDFSNameNodeAddr: session.HdfsNamenodeAddr, |
| 393 | HiveLocation: session.HiveLocation, |
| 394 | HDFSUser: session.HdfsUser, |
| 395 | HDFSPass: session.HdfsPass, |
| 396 | IsPAI: tf.IsPAI(), |
| 397 | PAITable: paiPredictTable, |
| 398 | } |
| 399 | |
| 400 | var program bytes.Buffer |
| 401 | |
| 402 | if err := predTemplate.Execute(&program, r); err != nil { |
| 403 | return "", err |
| 404 | } |