그래서 두 개의 데이터 프레임이 있습니다. 이런 데이터 프레임 1 :두 개의 데이터 프레임 결합 및 하나의 데이터 프레임 레코드를 다른 데이터로 업데이트
+----------+------+---------+--------+------+
| OrgId|ItemId|segmentId|Sequence|Action|
+----------+------+---------+--------+------+
|4295877341| 136| 4| 1| I|!||
|4295877346| 136| 4| 1| I|!||
|4295877341| 138| 2| 1| I|!||
|4295877341| 141| 4| 1| I|!||
|4295877341| 143| 2| 1| I|!||
|4295877341| 145| 14| 1| I|!||
| 123456789| 145| 14| 1| I|!||
| 809580109| 145| 9| 9| I|!||
+----------+------+---------+--------+------+
DataFrame2
+----------+------+-----------+----------+--------+
| OrgId|ItemId|segmentId_1|Sequence_1|Action_1|
+----------+------+-----------+----------+--------+
|4295877343| 149| 15| 2| I|!||
|4295877341| 136| null| null| I|!||
| 123456789| 145| 14| 1| D|!||
|4295877341| 138| 11| 22| I|!||
|4295877341| 141| 10| 1| I|!||
|4295877341| 143| 1| 1| I|!||
| 809580109| 145| NULL| NULL| I|!||
+----------+------+-----------+----------+--------+
가 이제 데이터 프레임 2의 레코드와 일치하는 두 데이터 프레임 업데이트 데이터 프레임 (1) 열 가입이 이하와 같다.
두 데이터 프레임의 키는 모두 OrgId 및 ItemId입니다.
따라서 예상되는 출력이 있어야합니다.
+----------+------+---------+--------+------+
| OrgId|ItemId|segmentId|Sequence|Action|
+----------+------+---------+--------+------+
|4295877346| 136| 4| 1| I|!||
|4295877341| 145| 14| 1| I|!||
|4295877343| 149| 15| 2| I|!||
|4295877341| 136| null| null| I|!||
|4295877341| 138| 11| 22| I|!||
|4295877341| 141| 10| 1| I|!||
|4295877341| 143| 1| 1| I|!||
| 809580109| 145| 9| 9| I|!||
+----------+------+---------+--------+------+
그래서 데이터 프레임 1 레코드를 데이터 프레임 2 레코드로 업데이트해야합니다. 데이터 프레임 1의 레코드가 2에서 발견되지 않으면 해당 레코드를 보유해야합니다. 새로운 레코드가 출력 다음
에서 추가로 요구 사항을 기록 후 dataframe 2에서 발견되는 경우 는
val df3 = df1.join(df2, Seq("OrgId", "ItemId"), "outer")
.select($"OrgId", $"ItemId",$"segmentId_1",$"Sequence_1",$"Action_1")
.filter(!$"Action_1".contains("D"))
df3.show()
.. 내가 뭐하는 거지입니다하지만 난 출력 아래 얻고있다.
+----------+------+-----------+----------+--------+
| OrgId|ItemId|segmentId_1|Sequence_1|Action_1|
+----------+------+-----------+----------+--------+
|4295877343| 149| 15| 2| I|!||
|4295877341| 136| null| null| I|!||
|4295877341| 138| 11| 22| I|!||
|4295877341| 141| 10| 1| I|!||
|4295877341| 143| 1| 1| I|!||
+----------+------+-----------+----------+--------+
나는 데이터 프레임 1에서 4295877346| 136| 4| 1| I|!|
기록 ...
left_outer 출력 이하 나 제공을 받고 있지 않다
+----------+------+-----------+----------+--------+
| OrgId|ItemId|segmentId_1|Sequence_1|Action_1|
+----------+------+-----------+----------+--------+
|4295877341| 136| null| null| I|!||
|4295877341| 138| 11| 22| I|!||
|4295877341| 141| 10| 1| I|!||
|4295877341| 143| 1| 1| I|!||
+----------+------+-----------+----------+--------+
으로 원하는 출력을 얻기해야 ...우리가 DF1의 마지막 레코드와 같은 null 값을 가져오고 DF1의 업데이트가 DF2의 마지막 레코드가 null 인 경우 하나의 특정 열을 가정하면 해당 열에 대해서만 DF1 값을 유지해야합니다. 어떻게 할 수 있습니까? –
죄송합니다. @Anupam, 귀하의 요구 사항을 분명히 이해하지 못했습니다. 좀 더 설명해 주시겠습니까? –
그래서 우리는 DF2 컬럼 값으로 업데이트 할 필요가 없다는 것을 의미하는 칼럼 값이 null 인 어떤 옵션 컬럼이 있습니다. 문자열로 NULL을 입력하십시오. –