Plu*_*ug1 5 user-defined-functions pandas apache-spark apache-arrow python-polars
Spark 提供了几种不同的方法来实现使用和返回 Pandas DataFrame 的 UDF。我目前正在使用联合版本,该版本采用两个(联合分组)Pandas DataFrame 作为输入并返回第三个。
为了在 Spark DataFrame 和 Pandas DataFrame 之间进行高效转换,Spark 使用 Apache Arrow 内存布局,但是仍然需要在 Arrow 和 Pandas 之间进行转换。我真的很想直接访问 Arrow 数据,因为这就是我最终处理 UDF 中的数据的方式(使用Polars)。
来时从 Spark -> Arrow -> Pandas -> Arrow (Polars) 走,返回时相反,似乎很浪费。
import pyarrow as pa\nimport polars as pl\n\nsql_context = SQLContext(spark)\n\ndata = [(\'James\',[1, 2]),]\nspark_df = sql_context.createDataFrame(data=data, schema = ["name","properties"])\n\ndf = pl.from_arrow(pa.Table.from_batches(spark_df._collect_as_arrow()))\n\nprint(df)\n\nRun Code Online (Sandbox Code Playgroud)\nshape: (1, 2)\n\xe2\x94\x8c\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\xac\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x90\n\xe2\x94\x82 name \xe2\x94\x86 properties \xe2\x94\x82\n\xe2\x94\x82 --- \xe2\x94\x86 --- \xe2\x94\x82\n\xe2\x94\x82 str \xe2\x94\x86 list[i64] \xe2\x94\x82\n\xe2\x95\x9e\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\xaa\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\xa1\n\xe2\x94\x82 James \xe2\x94\x86 [1, 2] \xe2\x94\x82\n\xe2\x94\x94\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\xb4\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x98\n\nRun Code Online (Sandbox Code Playgroud)\n
| 归档时间: |
|
| 查看次数: |
634 次 |
| 最近记录: |