복붙노트

[SCALA] 어떻게 반복 가능 객체의 스칼라의 목록에서 DataFrame를 만드는 방법?

SCALA

어떻게 반복 가능 객체의 스칼라의 목록에서 DataFrame를 만드는 방법?

나는 다음과 같은 스칼라 값이 :

val values: List[Iterable[Any]] = Traces().evaluate(features).toList

그리고 나는 DataFrame로 변환 할 수 있습니다.

나는 다음을 시도 할 때 :

sqlContext.createDataFrame(values)

나는이 오류가 발생했습니다 :

error: overloaded method value createDataFrame with alternatives:

[A <: Product](data: Seq[A])(implicit evidence$2: reflect.runtime.universe.TypeTag[A])org.apache.spark.sql.DataFrame 
[A <: Product](rdd: org.apache.spark.rdd.RDD[A])(implicit evidence$1: reflect.runtime.universe.TypeTag[A])org.apache.spark.sql.DataFrame
cannot be applied to (List[Iterable[Any]])
          sqlContext.createDataFrame(values)

왜?

해결법

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

    1.implicits 객체가 무엇인지 불꽃 이잖아. 그것은 당신이 DataFrame / 데이터 집합 / RDD로 일반적인 스칼라 모음 형식을 변환 할 수 있습니다. 여기에 스파크 2.0 예입니다하지만 너무 이전 버전에 존재

    implicits 객체가 무엇인지 불꽃 이잖아. 그것은 당신이 DataFrame / 데이터 집합 / RDD로 일반적인 스칼라 모음 형식을 변환 할 수 있습니다. 여기에 스파크 2.0 예입니다하지만 너무 이전 버전에 존재

    import org.apache.spark.sql.SparkSession
    val values = List(1,2,3,4,5)
    
    val spark = SparkSession.builder().master("local").getOrCreate()
    import spark.implicits._
    val df = values.toDF()
    

    편집 : 그냥 당신이 2D 목록 뒤에 깨달았다. 여기에 내가 스파크 쉘에 노력 무언가이다. 나는 튜플의 목록에 2D 목록을 변환 DataFrame에 암시 적 변환을 사용 :

    val values = List(List("1", "One") ,List("2", "Two") ,List("3", "Three"),List("4","4")).map(x =>(x(0), x(1)))
    import spark.implicits._
    val df = values.toDF
    

    EDIT2 : MTT에 의해 원래의 질문이 정답 인에 대한 2 차원 목록의 스칼라 목록에서 스파크 dataframe을 만드는 방법이었다. 원래 질문은 https://stackoverflow.com/revisions/38063195/1입니다 문제는 나중에 허용 대답과 일치하도록 변경되었습니다. 다른 사람이 원래의 질문과 비슷한 뭔가를 찾고있는 경우를 찾을 수 있도록이 편집 추가.

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

    2.언급 zero323, 우리는 먼저 변환 목록 [의 Iterable [모든] 목록 [행]에 다음 RDD 행을 넣어 스파크 데이터 프레임에 대한 스키마를 준비해야합니다.

    언급 zero323, 우리는 먼저 변환 목록 [의 Iterable [모든] 목록 [행]에 다음 RDD 행을 넣어 스파크 데이터 프레임에 대한 스키마를 준비해야합니다.

    목록 [의 Iterable [모든] 목록 [행]로 변환하려면, 우리는 말할 수있다

    val rows = values.map{x => Row(x:_*)}
    

    다음 스키마와 같은 가진 스키마, 우리는 RDD을 만들 수 있습니다

    val rdd = sparkContext.makeRDD[RDD](rows)
    

    그리고 마지막으로 스파크 dataframe를 만들

    val df = sqlContext.createDataFrame(rdd, schema)
    
  3. ==============================

    3.간단한 방법 :

    간단한 방법 :

    val newList = yourList.map(Tuple1(_))
    val df = spark.createDataFrame(newList).toDF("stuff")
    
  4. ==============================

    4.스파크 2에서 우리는 단지 토즈 API에 의해 DS에 목록을 변환하여 데이터 집합을 사용할 수 있습니다

    스파크 2에서 우리는 단지 토즈 API에 의해 DS에 목록을 변환하여 데이터 집합을 사용할 수 있습니다

    val ds = list.flatMap(_.split(",")).toDS() // Records split by comma 
    

    또는

    val ds = list.toDS()
    

    RDD 또는 DF 이상이보다 편리

  5. ==============================

    5.가장 간결한 방법의 I의 한 발견 :

    가장 간결한 방법의 I의 한 발견 :

    val df = spark.createDataFrame(List("A", "B", "C").map(Tuple1(_)))
    
  6. from https://stackoverflow.com/questions/38063195/how-to-create-dataframe-from-scalas-list-of-iterables by cc-by-sa and MIT license