2016-09-03 10 views
0

私はこのような何かを達成しようとしています。次のコードスニペットはPig Latinのものです。とにかく私はスパークで同じことをすることができますか?スパークグループby - ブタ変換

A = load 'student' AS (name:chararray,age:int,gpa:float); 
    DESCRIBE A; 

    A: {name: chararray,age: int,gpa: float} DUMP A; (John,18,4.0F) 
    (Mary,19,3.8F) (Bill,20,3.9F) (Joe,18,3.8F) 

    B = GROUP A BY age; 

    Result: (18,{(John,18,4.0F),(Joe,18,3.8F)}) (19,{(Mary,19,3.8F)}) 
    (20,{(Bill,20,3.9F)}) 

ありがとう。

答えて

0

名前のリストを年齢順にするのは簡単です。 Spark APIでは、完全な行を収集し、同じ方法で完全な行リストを取得することはできません。

// Input data 
val df = { 
    import org.apache.spark.sql._ 
    import org.apache.spark.sql.types._ 
    import scala.collection.JavaConverters._ 
    import java.time.LocalDate 

    val simpleSchema = StructType(
     StructField("name", StringType) :: 
     StructField("age", IntegerType) :: 
     StructField("gpa", FloatType) :: Nil) 

    val data = List(
     Row("John", 18, 4.0f), 
     Row("Mary", 19, 3.8f), 
     Row("Bill", 20, 3.9f), 
     Row("Joe", 18, 3.8f) 
    )  

    spark.createDataFrame(data.asJava, simpleSchema) 
} 
df.show() 
val df2 = df.groupBy(col("age")).agg(collect_list(col("name"))) 
df2.show() 
+0

データフレームは本当に必要ですか?あなたが(年齢、(人))のRDDを作成した場合、それは単純なグループByKeyです –

関連する問題