3
반복하되 데이터 프레임이 있습니다 :업데이트 열 DataFrame
import sqlContext.implicits._
case class TestData(banana: String, orange: String, apple : String, feijoa: String)
var data = sc.parallelize((1 to 5).map(i => TestData("banana="+i.toString,
"orange="+i.toString,"apple="+i.toString,"feijoa="+i.toString))).toDF
data.registerTempTable("data")
data.show
다음과 같습니다
case class result(fruits: Set[String], weight: Double)
val results = List(
result(Set("banana=1"), 200),
result(Set("banana=3", "orange=3"), 180),
result(Set("banana=2", "orange=2", "apple=3"), 170)
)
: 또한
+--------+--------+-------+--------+
| banana| orange| apple| feijoa|
+--------+--------+-------+--------+
|banana=1|orange=1|apple=1|feijoa=1|
|banana=2|orange=2|apple=2|feijoa=2|
|banana=3|orange=3|apple=3|feijoa=3|
|banana=4|orange=4|apple=4|feijoa=4|
|banana=5|orange=5|apple=5|feijoa=5|
+--------+--------+-------+--------+
는 results
의 sorted
목록이
반복하고 싶습니다 results
, 단 하나와 비교하십시오예 banana = 1
들어 dataframe의 각 컬럼은 하나 개의 값을 포함 : 데이터 프레임의 행3210 및 행 contains
특정 result
업데이트 경우 해당 열에 1
세트. 이 값들로 만들어진 result.fruits
집합입니다. 나는에 도움이 필요)
(0 to results.size-1)
.map(i => results(i).fruits)
2) 나는 results
data =
(1 to results.size)
.par
.foldLeft(data){ case(data,i) =>
data.withColumn(i.toString(),lit(0))
}
+--------+--------+-------+--------+-+-+-+
| banana| orange| apple| feijoa|1|2|3|
+--------+--------+-------+--------+-+-+-+
|banana=1|orange=1|apple=1|feijoa=1|0|0|0|
|banana=2|orange=2|apple=2|feijoa=2|0|0|0|
|banana=3|orange=3|apple=3|feijoa=3|0|0|0|
|banana=4|orange=4|apple=4|feijoa=4|0|0|0|
|banana=5|orange=5|apple=5|feijoa=5|0|0|0|
+--------+--------+-------+--------+-+-+-+
3의 크기에 따라 데이터 프레임에 열을 추가하는 방법을 알고 : 나는 결과를 반복하는 방법을 알고
1) 특정 row
에 result.fruits
이 포함되어 있는지 확인하는 select
기능을 결합하는 방법을 이해하고 적절한 열에 1
값을 설정하십시오. 먼저 results
열에서 값을 설정하십시오.는 두 번째 results
목록에서 열 #2
등의