저는 Databricks의 스파크로 작업하고 있습니다. 프로그래밍 언어는 스칼라입니다.Spark - 스칼라 - 다른 데이터 프레임의 조회 값으로 데이터 프레임의 값 바꾸기
나는 두 개의 데이터 프레임이 있습니다
나는 싶습니다 :
- 메인 데이터 프레임에서 "Age"== - 1 인 모든 행 찾기 dataframe 2에 해당 행
- 룩의 "제목"가치
- 봐이 제목을 가진 사람들의 평균 연령은
- 업데이트이 값을 주 dataframe의 나이를 확인할 수 있습니다.
나는 이것을 수행하는 방법에 대해 머리를 망쳤습니다. 필자가 생각해 낸 유일한 점은 데이터 프레임을 databricks의 테이블로 저장하고 SQL 문 (sql.Context.Sql ...)을 사용하여 매우 복잡해졌습니다.
더 효율적인 방법이 있는지 궁금합니다.
편집 : 카롤 Sudol에 추가 재현 예를
import org.apache.spark.sql.functions._
val df = sc.parallelize(Seq(("Fred", 20, "Intern"), ("Linda", -1, "Manager"), ("Sean", 23, "Junior Employee"), ("Walter", 35, "Manager"), ("Kate", -1, "Junior Employee"), ("Kathrin", 37, "Manager"), ("Bob", 16, "Intern"), ("Lukas", 24, "Junionr Employee")))
.toDF("Name", "Age", "Title")
println("Data Frame DF")
df.show();
val avgAge = df.filter("Age!=-1").groupBy("Title").agg(avg("Age").alias("avg_age")).toDF()
println("Average Ages")
avgAge.show()
println("Missing Age")
val noAge = df.filter("Age==-1").toDF()
noAge.show()
솔루션 덕분에
val imputedAges = df.filter("Age == -1").join(avgAge, Seq("Title")).select(col("Name"),col("avg_age"), col("Title"))
imputedAges.show()
val finalDF= imputedAges.union(df.filter("Age!=-1"))
println("FinalDF")
finalDF.show()
재현 가능한 예를 들려주세요. – mtoto
나는 완전한 혼란이 아닌 예를 연구 할 것이다. Wil은 내가 가지고있는대로 업데이트합니다. – Laura