pyspark.sql.PandasCogroupedOps.applyInPandas
的用法。用法:
PandasCogroupedOps.applyInPandas(func, schema)
使用 pandas 对每个 cogroup 应用一个函数,并将结果作为
DataFrame
返回。该函数应采用两个
pandas.DataFrame
并返回另一个pandas.DataFrame
。对于 cogroup 的每一侧,所有列作为pandas.DataFrame
一起传递给 user-function,返回的pandas.DataFrame
组合为DataFrame
。schema
应该是一个StructType
说明返回的pandas.DataFrame
的架构。如果指定为字符串,则返回的pandas.DataFrame
的列标签必须与已定义架构中的字段名称匹配,如果不是字符串,则必须按位置匹配字段数据类型,例如整数索引。返回的pandas.DataFrame
的长度可以是任意的。3.0.0 版中的新函数。
- func:函数
一个 Python 本机函数,它采用两个
pandas.DataFrame
并输出一个pandas.DataFrame
,或者采用一个元组(分组键)和两个 PandasDataFrame
并输出一个 PandasDataFrame
。- schema:
pyspark.sql.types.DataType
或 str PySpark 中
func
的返回类型。该值可以是pyspark.sql.types.DataType
对象或 DDL 格式的类型字符串。
参数:
注意:
此函数需要完全洗牌。同组的所有数据都将加载到内存中,因此如果数据倾斜并且某些组太大而无法放入内存,用户应该注意潜在的 OOM 风险。
如果返回使用字典构造的新
pandas.DataFrame
,建议按名称显式索引列以确保位置正确,或者使用OrderedDict
。例如,pd.DataFrame({‘id’: ids, ‘a’: data}, columns=[‘id’, ‘a’])
或pd.DataFrame(OrderedDict([(‘id’, ids), (‘a’, data)]))
。此 API 是实验性的。
例子:
>>> from pyspark.sql.functions import pandas_udf >>> df1 = spark.createDataFrame( ... [(20000101, 1, 1.0), (20000101, 2, 2.0), (20000102, 1, 3.0), (20000102, 2, 4.0)], ... ("time", "id", "v1")) >>> df2 = spark.createDataFrame( ... [(20000101, 1, "x"), (20000101, 2, "y")], ... ("time", "id", "v2")) >>> def asof_join(l, r): ... return pd.merge_asof(l, r, on="time", by="id") >>> df1.groupby("id").cogroup(df2.groupby("id")).applyInPandas( ... asof_join, schema="time int, id int, v1 double, v2 string" ... ).show() +--------+---+---+---+ | time| id| v1| v2| +--------+---+---+---+ |20000101| 1|1.0| x| |20000102| 1|3.0| x| |20000101| 2|2.0| y| |20000102| 2|4.0| y| +--------+---+---+---+
或者,用户可以定义一个接受三个参数的函数。在这种情况下,分组键将作为第一个参数传递,数据将作为第二个和第三个参数传递。分组键将作为 numpy 数据类型的元组传递,例如
numpy.int32
和numpy.float64
。数据仍将作为两个pandas.DataFrame
传入,其中包含原始 Spark DataFrames 中的所有列。>>> def asof_join(k, l, r): ... if k == (1,): ... return pd.merge_asof(l, r, on="time", by="id") ... else: ... return pd.DataFrame(columns=['time', 'id', 'v1', 'v2']) >>> df1.groupby("id").cogroup(df2.groupby("id")).applyInPandas( ... asof_join, "time int, id int, v1 double, v2 string").show() +--------+---+---+---+ | time| id| v1| v2| +--------+---+---+---+ |20000101| 1|1.0| x| |20000102| 1|3.0| x| +--------+---+---+---+
相关用法
- Python pyspark ParamGridBuilder用法及代码示例
- Python pyspark PolynomialExpansion用法及代码示例
- Python pyspark PowerIterationClustering用法及代码示例
- Python pyspark PowerIterationClusteringModel用法及代码示例
- Python pyspark PCA用法及代码示例
- Python pyspark PrefixSpanModel用法及代码示例
- Python pyspark PrefixSpan用法及代码示例
- Python pyspark create_map用法及代码示例
- Python pyspark date_add用法及代码示例
- Python pyspark DataFrame.to_latex用法及代码示例
- Python pyspark DataStreamReader.schema用法及代码示例
- Python pyspark MultiIndex.size用法及代码示例
- Python pyspark arrays_overlap用法及代码示例
- Python pyspark Series.asof用法及代码示例
- Python pyspark DataFrame.align用法及代码示例
- Python pyspark Index.is_monotonic_decreasing用法及代码示例
- Python pyspark IsotonicRegression用法及代码示例
- Python pyspark DataFrame.plot.bar用法及代码示例
- Python pyspark DataFrame.to_delta用法及代码示例
- Python pyspark element_at用法及代码示例
- Python pyspark explode用法及代码示例
- Python pyspark MultiIndex.hasnans用法及代码示例
- Python pyspark Series.to_frame用法及代码示例
- Python pyspark DataFrame.quantile用法及代码示例
- Python pyspark Column.withField用法及代码示例
注:本文由纯净天空筛选整理自spark.apache.org大神的英文原创作品 pyspark.sql.PandasCogroupedOps.applyInPandas。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。