복붙노트

[SCALA] 스칼라 : 나는 스칼라를 사용 Dataframes에 값을 대체 할 수있는 방법

SCALA

스칼라 : 나는 스칼라를 사용 Dataframes에 값을 대체 할 수있는 방법

예를 들어 나는 모든 번호를 대체 할 내가 스칼라에서 그렇게 할 수있는 방법 0으로 열에 0.2 같음? 감사

편집하다:

|year| make|model| comment            |blank|
|2012|Tesla| S   | No comment         |     | 
|1997| Ford| E350|Go get one now th...|     | 
|2015|Chevy| Volt| null               | null| 

이것은 내 Dataframe 내가 S에 메이크업 열에서 테슬라를 변경하는 것을 시도하고있다

해결법

  1. ==============================

    1.노트 : 올리비에 히라 르 도트로 했나요 같이,이 응답이 최적화되고 withColumn 용액을 사용하는 하나되지 (Azeroth2b 응답)

    노트 : 올리비에 히라 르 도트로 했나요 같이,이 응답이 최적화되고 withColumn 용액을 사용하는 하나되지 (Azeroth2b 응답)

    이 받아 들여졌다으로이 답변을 삭제할 수 없습니다

    다음은이 일에 내 걸릴 수 있습니다 :

     val rdd = sc.parallelize(
          List( (2012,"Tesla","S"), (1997,"Ford","E350"), (2015,"Chevy","Volt"))
      )
      val sqlContext = new SQLContext(sc)
    
      // this is used to implicitly convert an RDD to a DataFrame.
      import sqlContext.implicits._
    
      val dataframe = rdd.toDF()
    
      dataframe.foreach(println)
    
     dataframe.map(row => {
        val row1 = row.getAs[String](1)
        val make = if (row1.toLowerCase == "tesla") "S" else row1
        Row(row(0),make,row(2))
      }).collect().foreach(println)
    
    //[2012,S,S]
    //[1997,Ford,E350]
    //[2015,Chevy,Volt]
    

    당신은 실제로 직접 사용하는 DataFrame에 매핑 할 수 있습니다.

    그래서 당신은 기본적으로 문자열 테슬라의 1 열을 확인합니다. 그것의 테슬라 경우, 메이크업 열 1의 다른 당신을 현재의 값에 대한 값 S를 사용

    내 예제에서 다음 인덱스 (0부터)를 사용하여 행의 모든 ​​데이터와 튜플을 구축 (행 (행 (0), 메이크업, 열 (2))))

    그것을 할 수있는 더 좋은 방법은 아마도이있다. 그 익숙한 아직 스파크 우산 아니다

  2. ==============================

    2.스파크 1.6.2, 자바 코드 (죄송합니다), 이것이 RDD를 거치지 않고 전체 dataframe에 대한 S 테슬라의 모든 인스턴스를 변경합니다 :

    스파크 1.6.2, 자바 코드 (죄송합니다), 이것이 RDD를 거치지 않고 전체 dataframe에 대한 S 테슬라의 모든 인스턴스를 변경합니다 :

    dataframe.withColumn("make", when(col("make").equalTo("Tesla"), "S")
                                 .otherwise(col("make") 
                        );
    

    비 테슬라 열이 NULL로 전환되지 않도록 "그렇지 않으면"marshall245 @ 추가 수정 됨.

  3. ==============================

    3.Azeroth2b @에서 솔루션의 오프 구축. 당신은 항목의 몇 가지를 교체하고 나머지는 변경하지 않고 남겨 둡니다. 다음 작업을 수행합니다. 그렇지 않으면 (...) 방법을 사용하지 않고, 열의 나머지는 널 (null)된다.

    Azeroth2b @에서 솔루션의 오프 구축. 당신은 항목의 몇 가지를 교체하고 나머지는 변경하지 않고 남겨 둡니다. 다음 작업을 수행합니다. 그렇지 않으면 (...) 방법을 사용하지 않고, 열의 나머지는 널 (null)된다.

    import org.apache.spark.sql.functions._
    val newsdf = sdf.withColumn("make", when(col("make") === "Tesla", "S")
                                       .otherwise(col("make"))
                               );
    

    올드 DataFrame

    +-----+-----+ 
    | make|model| 
    +-----+-----+ 
    |Tesla|    S| 
    | Ford| E350| 
    |Chevy| Volt| 
    +-----+-----+ 
    

    새로운 Dataframe

    +-----+-----+
    | make|model|
    +-----+-----+
    |    S|    S|
    | Ford| E350|
    |Chevy| Volt|
    +-----+-----+
    
  4. ==============================

    4.이는 사용자 정의 기능 (UDF)와 dataframes 달성 될 수있다.

    이는 사용자 정의 기능 (UDF)와 dataframes 달성 될 수있다.

    import org.apache.spark.sql.functions._
    val sqlcont = new org.apache.spark.sql.SQLContext(sc)
    val df1 = sqlcont.jsonRDD(sc.parallelize(Array(
          """{"year":2012, "make": "Tesla", "model": "S", "comment": "No Comment", "blank": ""}""",
          """{"year":1997, "make": "Ford", "model": "E350", "comment": "Get one", "blank": ""}""",
          """{"year":2015, "make": "Chevy", "model": "Volt", "comment": "", "blank": ""}"""
        )))
    
    val makeSIfTesla = udf {(make: String) => 
      if(make == "Tesla") "S" else make
    }
    df1.withColumn("make", makeSIfTesla(df1("make"))).show
    
  5. ==============================

    5.Dapha2nariplesa (( "존"매핑 "이름"-> "부패", "신디"-> "Joyeeta")). 쇼 ()

    Dapha2nariplesa (( "존"매핑 "이름"-> "부패", "신디"-> "Joyeeta")). 쇼 ()

    유형의 클래스 DataFrameNaFunctions에서 대체 할 [T] (골 : 문자열, 대체 : 맵 [T, T]) org.apache.spark.sql.DataFrame

    이 기능을 실행하면 ON 헤더 활성 스파크 객체와 dataframe이 있어야합니다.

  6. from https://stackoverflow.com/questions/32357774/scala-how-can-i-replace-value-in-dataframes-using-scala by cc-by-sa and MIT license