デカルト製品は任意のキーに参加せずに参加している:私はここで使用する.MAPを複製しようとしていました。 A
とB
の2つのデータフレームがそれぞれnA
とnB
の行であるとすると、nA x nB
行のデータフレームになります。
あなたが探していることとの定期的なinner join
キーzip
に参加されています
A = spark.createDataFrame([[-69,40,"trp"],[-69,41,"nxt"]], ["Lat","lon","zip"])
B = spark.createDataFrame([[-68,43,"trp"],[-89,45,"trp"]], ["Lat","lon","zip"])
A.join(B, "zip").show()
+---+---+---+---+---+
|zip|Lat|lon|Lat|lon|
+---+---+---+---+---+
|trp|-69| 40|-68| 43|
|trp|-69| 40|-89| 45|
+---+---+---+---+---+
注:は、列名の曖昧さ回避と気をつけても、あなたが例えば前に各データフレームのための構造でlon, Lat
を置くことができます参加する:
import pyspark.sql.functions as psf
A = A.select("zip", psf.struct("Lat", "Long").alias("A"))
B = B.select("zip", psf.struct("Lat", "Long").alias("B"))
df = A.join(B, "zip")
df.show()
df.printSchema()
+---+--------+--------+
|zip| A| B|
+---+--------+--------+
|trp|[-69,40]|[-68,43]|
|trp|[-69,40]|[-89,45]|
+---+--------+--------+
root
|-- zip: string (nullable = true)
|-- A: struct (nullable = false)
| |-- Lat: long (nullable = true)
| |-- lon: long (nullable = true)
|-- B: struct (nullable = false)
| |-- Lat: long (nullable = true)
| |-- lon: long (nullable = true)
okです。各zipに1000ポイントがあり、1mポイントのデータフレームに参加している場合、データフレームを作成するのに適していますか?または、RDDや配列タプルのようにメモリが少ない別の方法があります。 – muni
結合時に小さなデータフレームを 'ブロードキャスト 'することができます。これは、すべてのノードにコピーしてメモリ使用量を最適化します:' A.join(psf.broadcast(B) "zip") ' – MaFF