는 방법을 채우지도[문자열 데이터 프레임]열로 데이터 프레임에서 스칼라

0

질문

Map[String, Dataframe]. 내가 결합하려는 모든 데이터 안쪽에 있는 지도로 하나의 데이터 프레임. 할 수 있는 데이터 프레임을 갖는 열의 지도가 데이터 형식?

def sample(dfs : Map[String,Dataframe]): Dataframe =
{
.........
}

예제:

DF1

id name age
1  aaa  23
2  bbb  34

DF2

game  time  score
ludo  10    20
rummy 30    40 

나는 패스 위의 두 가지 DFs 으로 지도하는 기능입니다. 그런 다음 데이터의 각 dataframes 으로 단일한 열의 출력 데이터 프레임 json 으로 형식입니다.

아웃 DF

+---------------------------------------------------------------------------------------+
| column1                                                                              |
+---------------------------------------------------------------------------------------+
| [{"id":"1","name":"aaa","age":"23"},{"id":21","name":"bbb","age":"24"}]               |
| [{"game":"ludo","time":"10","score":"20"},{"game":"rummy","time":"30","score":"40"}]  |
+---------------------------------------------------------------------------------------+
apache-spark dataframe dictionary scala
2021-11-23 13:42:20
2

최고의 응답

1

당신을 생성하는 하나의 행당 데이터 프레임. 주의 경우,하나의 dataframes 충분히 큰할 수 없도록에 포함된 하나의 집행,이 코드는 것입니다.

먼저 데이터를 생성하고 지도 dfs 의 유형 Map[String, DataFrame].

val df1 = Seq((1, "aaa", 23), (2, "bbb", 34)).toDF("id", "name", "age")
val df2 = Seq(("ludo", 10, 20), ("rummy", 10, 40)).toDF("game", "time", "score")
dfs = Seq(df1, df2)

그런 다음,각 데이터 프레임의지도,우리가 생성하는 두 개의 열이 있습니다. big_map associates 각 열 이름의 데이터 프레임을 그 가치(던지기에서 문자열을 일관성 있는 타입)으로 구성되어 있습니다. df 단순히 이름을 포함한 데이터 프레임. 우리는 그런 조합의 모든 dataframes 과 reduce 과 그룹에 의해 name (는 모든 데이터 프레임 끝까지 완전히 중 하나에서 행하고 따라서 하나 하나는 실행).

dfs
    .toSeq
    .map{ case (name, df) => df
        .select(map(
             df.columns.flatMap(c => Seq(lit(c), col(c).cast("string"))) : _*
        ) as "big_map")
        .withColumn("df", lit(name))}
    .reduce(_ union _)
    .groupBy("df")
    .agg(collect_list('big_map) as "column1")
    .show(false)
+---+-----------------------------------------------------------------------------------+
|df |column1                                                                            |
+---+-----------------------------------------------------------------------------------+
|df0|[{id -> 1, name -> aaa, age -> 23}, {id -> 2, name -> bbb, age -> 34}]             |
|df1|[{game -> ludo, time -> 10, score -> 20}, {game -> rummy, time -> 10, score -> 40}]|
+---+-----------------------------------------------------------------------------------+
2021-11-24 07:05:52
0

여기에는 솔루션으로 특정 사용한 경우:

import org.apache.spark.sql._

def sample(dfs : Map[String, DataFrame])(implicit spark: SparkSession): DataFrame =
  dfs
    .values
    .foldLeft(spark.emptyDataFrame)((acc, df) => acc.union(df))

점화 세션을 만드는 데 필요한 빈 데이터 프레임 어큐뮬레이터에 접.

안 경우를 보장할 수 있습니다 Map 비 비어 있습니다.

def sample(dfs : Map[String, DataFrame]): DataFrame =
  dfs
    .values
    .reduce((acc, df) => acc.union(df))
2021-11-23 14:30:01

할 수 있을 확인하시기 바랍 질문 저는 추가 예제.각각의 입력 데이터 프레임에는 나이 차이 스키마 그래서 내가 원하는 데이터의 입력 데이터 프레임을 채울 수 있으로 열,그래서 제출력 데이터 프레임 데이터를 각각의 입력 데이터 프레임 중 하나에서 열
minnu

다른 언어로

이 페이지는 다른 언어로되어 있습니다

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................