PythonStruct.yql 783 B

123456789101112131415161718192021222324252627282930313233
  1. (
  2. (let config (DataSource 'config))
  3. (let world (Configure! world config 'PureDataSource 'yt))
  4. # prepare python udf
  5. (let ui32 (DataType 'Uint32))
  6. (let str (DataType 'String))
  7. (let personType (StructType '('name str) '('age ui32)))
  8. (let udfType (CallableType '() '(personType) '(str) '(ui32)))
  9. (let udfScript (String '@@
  10. class Person:
  11. def __init__(self, name, age):
  12. self.name = name
  13. self.age = age
  14. def NewPerson(name, age):
  15. return Person(name, age)
  16. @@))
  17. (let udf (ScriptUdf 'Python 'NewPerson udfType udfScript))
  18. # call udf
  19. (let result (Apply udf (String 'Jamel) (Uint32 '99)))
  20. # output result with type
  21. (let res_sink (DataSink 'result))
  22. (let world (Write! world res_sink (Key) result '()))
  23. # finish
  24. (let world (Commit! world res_sink))
  25. (return world)
  26. )