pyspark group_set या group_list को groupby के साथ




group-by collect (2)

आपको एग का उपयोग करने की आवश्यकता है। उदाहरण:

from pyspark import SparkContext
from pyspark.sql import HiveContext
from pyspark.sql import functions as F

sc = SparkContext("local")

sqlContext = HiveContext(sc)

df = sqlContext.createDataFrame([
    ("a", None, None),
    ("a", "code1", None),
    ("a", "code2", "name2"),
], ["id", "code", "name"])

df.show()

+---+-----+-----+
| id| code| name|
+---+-----+-----+
|  a| null| null|
|  a|code1| null|
|  a|code2|name2|
+---+-----+-----+

ऊपर ध्यान दें कि आपको एक HiveContext बनाना है। विभिन्न स्पार्क संस्करणों से निपटने के लिए https://stackoverflow.com/a/35529093/690430 देखें।

(df
  .groupby("id")
  .agg(F.collect_set("code"),
       F.collect_list("name"))
  .show())

+---+-----------------+------------------+
| id|collect_set(code)|collect_list(name)|
+---+-----------------+------------------+
|  a|   [code1, code2]|           [name2]|
+---+-----------------+------------------+

मैं collect_set बाद collect_list पर collect_set या collect_list उपयोग कैसे कर सकता हूं। उदाहरण के लिए: df.groupby('key').collect_set('values') । मुझे एक त्रुटि मिली: AttributeError: 'GroupedData' object has no attribute 'collect_set'


यदि आपकी डेटाफ़्रेम बड़ी है, तो आप मेमोरी त्रुटि से बचने के लिए पांडा udf (GROUPED_AGG) का उपयोग करने का प्रयास कर सकते हैं। यह ज्यादा तेज भी है।

समूहबद्ध कुल पांडस यूडीएफ स्पार्क कुल कार्यों के समान हैं। समूहीकृत समूह पंडों UDFs का उपयोग GroupBy ()। Agg () और pyspark.sql.Window के साथ किया जाता है। यह एक या एक से अधिक पांडा से एकत्रीकरण को परिभाषित करता है। एक स्केलर मान पर, जहां प्रत्येक pandas.Series समूह या विंडो के भीतर एक कॉलम का प्रतिनिधित्व करता है। पंडों udf

उदाहरण:

 import pyspark.sql.functions as F @F.pandas_udf('string', F.PandasUDFType.GROUPED_AGG) def collect_list(name): return ', '.join(name) grouped_df = df.groupby('id').agg(collect_list(df["name"]).alias('names')) 




collect