/ / Персонализирано разделяне в Pyspark - apache-spark, pyspark, rdd

Празно разделяне в Pyspark - apache-spark, pyspark, rdd

Опитвам се да създам персонализиран дял в задание за искра, като използвам PySpark, че имаме следните данни

 x = sc.parallelize([["a1","a2",0], ["b1","b2",0], ["c1","c2",1], ["d1","d2",1], ["e1","e2",1], ["f1","f2",2]])

Бих искал да се разделят въз основа на третия елемент на списъка ..Без е код, който аз се опитвам, но тя завършва с грешка "Твърде много стойности, за да Разопаковане"

rdd = x.partitionBy(3,lambda x: int(x[2])).collect()

По-долу е точната грешка, която получавам

ValueError: too many values to unpack
org.apache.spark.api.python.PythonRunner$$anon$1.read(PythonRDD.scala:193)
at org.apache.spark.api.python.PythonRunner$$anon$1.<init>(PythonRDD.scala:234)
at org.apache.spark.api.python.PythonRunner.compute(PythonRDD.scala:152)
at org.apache.spark.api.python.PythonRDD.compute(PythonRDD.scala:63)
at org.apache.spark.rdd.RDD.computeOrReadCheckpoint(RDD.scala:319)
at org.apache.spark.rdd.RDD.iterator(RDD.scala:283)
at org.apache.spark.api.python.PairwiseRDD.compute(PythonRDD.scala:390)

очакваното производство

[[["a1","a2",0], ["b1","b2",0]], [["c1","c2",1], ["d1","d2",1], ["e1","e2",1]], [["f1","f2",2]]]

Отговори:

1 за отговор № 1

Както @Himaprasoon вече посочи, можете да разделите само на двойки K-V, във вашата ситуация можете да опитате

rdd = x.keyBy(lambda row: int(row[2])).partitionBy(3)

rdd.values().glom().collect()

което дава :

[[["a1", "a2", 0], ["b1", "b2", 0]],
[["c1", "c2", 1], ["d1", "d2", 1], ["e1", "e2", 1]],
[["f1", "f2", 2]]]