2016-09-09 3 views
0

값을 업데이트해야하며 값이 0이면 해당 행을 삭제해야합니다. 다음은 스냅 샷입니다.데이터 프레임의 값을 업데이트하고이 값에 따라 행을 스칼라에 놓는 방법

val net = sc.accumulator(0.0) 
    df1.foreach(x=> {net += calculate(df2, x)}) 

    def calculate(df2:DataFrame, x : Row):Double = { 
    var pro:Double = 0.0 

    df2.foreach(y => {if(xxx){ do some stuff and update the y.getLong(2) value } 
    else if(yyy){ do some stuff and update the y.getLong(2) value} 
    if(y.getLong(2) == 0) {drop this row from df2} }) 
    return pro; 
    } 

의견이 있으십니까? 감사.

답변

1

DataFrame 또는 RDD을 변경할 수 없습니다. 그것들은 이유가있을 때만 읽혀집니다. 그러나 새로운 방법을 만들고 사용 가능한 모든 방법으로 변환을 사용할 수 있습니다. 당신이 값을 업데이트 할 수 없습니다,

df.withComlumn(...) 
1

DataFrames는 불변하지만 오히려 새로 만들기 : 당신이 dataframe의 열 예를 들어 내용에 대한 변경하고자 할 때 이렇게 다만이 같은 함수를 사용하여 업데이트 된 내용으로 새 열을 추가 매번 DF.

위의 스 니펫 (누적 기 사용을 이해할 수 없음)을 사용하여 달성하려는 내용이 명확하지 않은 유스 케이스를 다시 짜낼 수 있습니까? 오히려 df2.withColumn(...)을 시도하고 여기에서 udf를 사용할 수 있습니다.

관련 문제