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。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。