を使用してApache Saprkにチェック履歴から2つのデータフレームを比較私は次のような構造でadataframeを持ってScalaの
EmployeeDF
id name date code
1 John 2015-4-14 C11
2 Roy 2011-5-20 C11
3 John 2010-5-20 C11
4 John 2012-5-20 C10
私がもし同じコードが2年前に同じ従業員に適用されていることを履歴を確認したいん。どうやってやるの。私はデータフレーム内に何百万ものデータを持っているだけのサンプルデータです。私はパフォーマンスを達成したいのです。行が繰り返されるので、データフレームに参加するとパフォーマンスが低下します。デカルトを作成し、自己結合中に行を複製します。私はマップのようなもので達成したい。
EDIT:現在のコード(OPのコメントから追加)
我々は歴史をチェックして、いくつかの従業員のみが存在する場合されているので、私は複数回繰り返され、それらの従業員を取得しています最初のステップで一度それはこの従業員のための歴史がないことを意味します。したがって、このステップのためのコードは次のとおりです。今、主なステップは以下の通りです
val repeatedEmpDF = SparkConfig
.sc
.sqlContext
.sql("SELECT *, '2' as level FROM cpeFirstStep WHERE e_id IN(SELECT e_id FROM cpeFirstStep where code = 'C11' " + " GROUP BY e_id HAVING COUNT(e_id)>1)")
.cache()
:
val uniqueEmpDF = SparkConfig
.sc
.sqlContext
.sql("SELECT *, '1' as level FROM cpeFirstStep WHERE e_id IN(SELECT e_id FROM cpeFirstStep where code = 'C11' " + " GROUP BY e_id HAVING COUNT(e_id)=1)")
.cache()
第二工程を繰り返し、コードはこれですされている従業員を取得することです
val historyJoin = SparkConfig
.sc
.sql("SELECT x.*, CASE WHEN y.code = x.code THEN '3' ELSE '4' END level FROM repeatedEmptDF X " + "LEFT JOIN repeatedEmptDF Y ON y.e_id = x.e_id AND y.code = x.code " + "AND y.date < x.data - INTERVAL 2 YEAR")
正確に2年前ですか? 2年前の意味は? '' code ''と '' id ''をグループ化し、日付の条件をチェックすることができます。 –
あなたが書いたコードを提供してください。それは私たちがあなたを助けやすくするでしょう。 –
@ Sarvesh Kumar Singh 2年以上前に同じ従業員に同じコードが適用された場合、この行にレベル1をマークし、それ以外の場合はレベル2としてマークします。 –