IPアドレスとそれに対応する長い値(ip_int)を持つ1つのデータフレーム(df)を持っています。これで、ジオロケーション情報を含む別のデータフレーム(ip2Country)国の名前。 Scalaでどうすればいいですか?私のコードは現在動作しませんでした:メモリ制限を超えています。スパーク:効率的な別のデータフレームの検索方法
val ip_ints=df.select("ip_int").distinct.collect().flatMap(_.toSeq)
val df_list = ListBuffer[DataFrame]()
for(v <- ip_ints){
var ip_int=v.toString.toLong
df_list +=ip2Country.filter(($"network_start_integer"<=ip_int)&&($"network_last_integer">=ip_int)).select("country_name").withColumn("ip_int", lit(ip_int))
}
var df1 = df_list.reduce(_ union _)
df=df.join(df1,Seq("ip_int"),"left")
は基本的に私はすべてのip_int値を反復処理し、ip2Countryでそれらを検索し、DFに戻ってそれらをマージしてみてください。
ご協力いただきありがとうございます。
ありがとう!それは完全に動作します!私は結合がそのように使用できることを知らなかった – ELI
結合は常にこの方法で働いた:)あなたの試みでSeq( "ip_int")は実際にdf( "ip_int")=== df1( "ip_int")です。 :) –
あなたが本当にあなたを助けた場合、あなたもアップアップすることができます:) –