PythonStruct.yqls 734 B

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