我想知道如何将Spark数据帧转换为极点数据帧.
假设我在PySpark上有这样的代码:
df = spark.sql('''select * from tmp''')
我可以很容易地使用.toPandas
将其转换为Pandas 数据帧.
极点也有类似的东西吗,因为我需要得到一个极点数据帧以供进一步处理?
我想知道如何将Spark数据帧转换为极点数据帧.
假设我在PySpark上有这样的代码:
df = spark.sql('''select * from tmp''')
我可以很容易地使用.toPandas
将其转换为Pandas 数据帧.
极点也有类似的东西吗,因为我需要得到一个极点数据帧以供进一步处理?
皮斯帕克用箭变成了Pandas .极点是对箭形记忆的抽象.所以我们可以劫持Spark在内部使用的API来创建箭头数据,并使用它来创建极点DataFrame
.
给出一个spark 上下文,我们可以写道:
import pyarrow as pa
import polars as pl
sql_context = SQL语境(spark)
data = [('James',[1, 2]),]
spark_df = sql_context.createDataFrame(data=data, schema = ["name","properties"])
df = pl.from_arrow(pa.Table.from_batches(spark_df._collect_as_arrow()))
print(df)
shape: (1, 2)
┌───────┬────────────┐
│ name ┆ properties │
│ --- ┆ --- │
│ str ┆ list[i64] │
╞═══════╪════════════╡
│ James ┆ [1, 2] │
└───────┴────────────┘
这实际上会比spark
本身提供的toPandas
更快,因为它节省了一个额外的副本.
toPandas()
将导致此序列化/复制步骤:
spark-memory -> arrow-memory -> pandas-memory
个
对于给定的查询,假设我们拥有:
spark-memory -> arrow/polars-memory
个