2017-02-22 8 views
0

データフレームが2つあるとします。df1df2です。 df1df2の両方に「id」列が含まれています。私は、結果のDF、df1primeは、DF2で見つかったすべてのID、 のDF1 スパーク:どのように結合を使用せずに行をフィルタリングする?

  • なしで見られる

    • IDのみを有するように、DF1をフィルタリングします

      結合を使用しない。これどうやってするの? DFの代わりにRDDに戻るのは助けになりますか? pysparkとscalaの両方の応答が歓迎されます。

      ありがとうございます!

      編集:私はあなたが本当に唯一の(あなたがあなたの質問に述べるよう)あなたのdf1primeにidをしたい場合、あなたは、単に(スカラ)を行うことができますDF1

  • +0

    何が問題ですか? [here](http://stackoverflow.com/questions/42351669/how-to-filter-duplicate-records-having-multiple-key-in-spark-dataframe/)を参照してください。 – mtoto

    +0

    特に結合には何も問題はありませんが、より安価な操作を探すのが好都合です – tohweizhong

    +0

    データフレームがある場合、反結合は最も安価な操作になります。もし 'rdd'で作業したいなら' cougroup() 'を使いフィルタリングすることができます。 – mtoto

    答えて

    0

    から行全体を維持したいと思います:

    val df1primeIDs = df1.select($"id").except(df2.select($"id")) 
    

    参加ずに、df1の列全体が必要な場合は、私は以外のオプションが表示されない(私の上の行とidが長いタイプであると仮定して):

    val df1prime = df1.where($"id".isin(
        df1primeIDs.collect().map(_.getLong(0)):_*) 
    ) 
    

    通常のコレクションはオプションではありません...

    +0

    ああ、私はまだdf1のすべての列を持っていたいと思います。収集は非常に高価になります.. – tohweizhong

    関連する問題