2017-05-16 19 views
0

私はN列のデータフレームを持っており、キーが列名でタプル(文字列、ブール値)を持つハッシュマップを持っています。特定の列に適用関数を適用します。

タプルと比較して、ある種の条件を満たす各列に対して、私はその列のすべての要素に関数を適用する必要があります。

最後に、列名に応じていくつかの条件を満たすデータフレームの一部の列を変更する必要があります。

これを行うにはどのような方法が最適ですか?

+1

あなたがやろうとしているものは不明です。より具体的になり、サンプルデータ、期待される出力、実際のコードを共有できますか? – mtoto

+0

@mtotoデータフレームの配列からデータフレームを作成するにはどうすればよいですか? –

+0

Scala、Java、Python? –

答えて

0

あなたのハッシュマップでfoldLeftを試すことができます。ここではScalaのための例です:

import org.apache.spark.sql.Column 
import org.apache.spark.sql.functions._ 

val colMap = Map(
    "col1" -> ("a", true), 
    "col2" -> ("a", true), 
    "col3" -> ("a", false) 
) 

val df = Seq((1, 1, 1), (2, 2, 2)).toDF("col1", "col2", "col3") 

def verify(strValue: String, boolValue: Boolean): Boolean = { 
    strValue == "a" && boolValue 
} 
def processColumn(c: Column): Column = c * 2 

colMap.foldLeft(df) { 
    case (curDF, (colName, (strValue, boolValue))) => 
    if(verify(strValue, boolValue)) curDF.withColumn(colName, processColumn(col(colName))) 
    else curDF 
} 
関連する問題