UDFs now no longer require up-front declaration of which arguments have to be Expressions, and what input types they are passed in as (list, numpy, arrow etc). Instead:
1. Inputs are always passed in as daft.series.Series objects and users can now easily convert this to the format they care about using Series.to_pylist(), Series.to_numpy() etc.
2. Which inputs are going to be daft.series.Series vs Python objects is inferred at runtime by checking which arguments a user passes in are Expressions.
For more information, consult: [UDF User Guide](https://www.getdaft.io/projects/docs/en/latest/learn/user_guides/udf.html)
Typing
Our old typing APIs have changed - the definitive typing API is now found at daft.DataType.
If you are declaring types (for instance as return types for UDFs), you should now use the DataType.* constructor methods!
Input/Output APIs
Creation of DataFrames has been promoted to module-level functions!
Before:
python
from daft import DataFrame
df = DataFrame.read_csv(...)
After:
python
import daft
df = daft.read_csv(...)
This is a big improvement in useability (moving forward, Daft will try to make it as easy as possible to use us by just importing the top-level daft module).
For more information, please see: [API Documentation for Input/Output](https://www.getdaft.io/projects/docs/en/latest/api_docs/input_output.html).