SPARK DataFrame API'sını kimliğe göre gruplandırmak, bir gruptaki tüm değer kombinasyonlarını hesaplamak ve tek bir çıktı veri çerçevesi oluşturmak için nasıl kullanabilirim?Spark Dataframe API'sı: grup kimliği ve bilgi işlem kombinasyonları
Örnek:
val testSchema = StructType(Array(
StructField("id", IntegerType),
StructField("value", StringType)))
val test_rows = Seq(
Row(1, "a"),
Row(1, "b"),
Row(1, "c"),
Row(2, "a"),
Row(2, "d"),
Row(2, "e")
)
val test_rdd = sc.parallelize(test_rows)
val test_df = sqlContext.createDataFrame(test_rdd, testSchema)
Beklenen çıkış: Şimdiye kadar
1 a b
1 a c
1 b c
2 a d
2 a e
2 d e
En çözüm: katılmak
gerçekleştirin öz, id eşitliği filtre ve sorunu Kalan eşitleyen
val result = test_df.join(
test_df.select(test_df.col("id").as("r_id"), test_df.col("value").as("r_value")),
($"id" === $"r_id") and ($"value" !== $"r_value")).select("id", "value", "r_value")
+---+-----+-------+
| id|value|r_value|
+---+-----+-------+
| 1| a| b|
| 1| a| c|
| 1| b| a|
| 1| b| c|
| 1| c| a|
| 1| c| b|
| 2| a| d|
| 2| a| e|
| 2| d| a|
| 2| d| e|
| 2| e| a|
| 2| e| d|
+---+-----+-------+
ortadan kaldırmak: ne kadar yinelenen setleri, örneğin, (a, b) ve (b, a) birleştirme gerçekleştirirken ortadan kaldırmak için?
Bu durumda 'DataFame' yerine bir' RDD 'kullanmak daha iyidir, bunu okuyun [Spark DataFrame Toplama İşlevi] (http://stackoverflow.com/questions/33899977/spark-dataframe-customagroupregation- -sistemi-sütun-of-vektörleri) ve neden olduğunu göreceksiniz. –