2017-11-17 12 views
0

私たちは健康保険プランであり、プロバイダーから請求されたすべてのクレームラインの詳細をすべて記録するデータベースがあります。私は、2つの特定の手続きコードで請求されたクレームIDを特定したいと思います。ここではダミーのデータセットです。この偽の例では値が別のフィールドの他の値に含まれている場合にフィールド値を保持する

val df = Seq(
     ("153T32", "D0201"), 
     ("153T32", "D3303"), 
     ("153T32", "F2303"), 
     ("421F32", "D0200"), 
     ("421F32", "D1111"), 
     ("421F32", "D0201"), 
     ("991E32", "D0201"), 
     ("991E32", "F2303"), 
     ("991E32", "A1123"), 
     ("529E52", "G1029"), 
     ("529E52", "B0392")). 
    toDF("claim_id", "code") 

、私はcode === "D0201"code === "F2303"の両方に関連付けられているclaim_id値を識別します。私はこれをどのようにして2つの新しいDataFramesを作成し、それぞれがcodeの値の1つでフィルタリングされ、それらを一緒に結合するかを考え出しました。しかし、中間のDataFramesを作成せずにこれを行う方法があれば、皆さんがどのようにそれをやるのかを見たいと思います。ここで

が私の現在のソリューションです:

val df1 = df.where($"code" === "D0201") 
val df2 = df.where($"code" === "F2303") 
val joinExpr = df1.col("claim_id") === df2.col("claim_id") 

val finalDF = df1.join(df2, joinExpr, "inner").select(df1.col("claim_id")) 

finalDF.show() 
+--------+ 
|claim_id| 
+--------+ 
| 153T32| 
| 991E32| 
+--------+ 

答えて

1

には重複行は元のデータフレーム内に存在しないと仮定し、ここでの一つのアプローチは参加せずに次のとおりです。

(df.where($"code".isin("D0201", "F2303")) 
    .groupBy("claim_id").agg(count($"code").as("cnt")) 
    .where($"cnt" === 2).select("claim_id") 
).show 
+--------+                  
|claim_id| 
+--------+ 
| 153T32| 
| 991E32| 
+--------+ 
関連する問題