PythonCallableAsArg.yql 747 B

12345678910111213141516171819202122232425262728293031
  1. (
  2. (let config (DataSource 'config))
  3. (let world (Configure! world config 'PureDataSource 'yt))
  4. # common types
  5. (let ui64 (DataType 'Uint64))
  6. (let str (DataType 'String))
  7. # callable func
  8. (let funcType (CallableType '() '(str) '(str) '(ui64)))
  9. (let func (Udf 'SimpleUdf.Repeat))
  10. # python udf
  11. (let udfType (CallableType '() '(str) '(funcType) '(ui64)))
  12. (let udfScript (String '@@
  13. def new_string(func, x):
  14. return func('x', x) + ':' + func('y', x)
  15. @@))
  16. (let udf (ScriptUdf 'Python 'new_string udfType udfScript))
  17. # call udf
  18. (let x (Uint64 '3))
  19. (let result (Apply udf func x))
  20. # output result with type
  21. (let res_sink (DataSink 'result))
  22. (let world (Write! world res_sink (Key) result '( '('type) )))
  23. # finish
  24. (return (Commit! world res_sink))
  25. )