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
、単価を比較するデータフレームの行と3210行とcontains
特定result
場合、適切な列に1
設定更新:データフレームの各列は、例えばbanana = 1
ため、唯一つの値を含みます。これらの値から作られたresult.fruits
のセット。
1)私は結果を反復処理する方法を知っている:
(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のサイズによってデータフレームに列を追加する方法を知っている)私はに助けが必要特定のrow
にresult.fruits
が含まれているかどうかをチェックするselect
機能を組み合わせる方法を理解してから、適切な列に値1
を設定してください。最初にresults
の列#1
、第二のカラム#2
でresults
リストからとなど