2017-08-17 13 views
0

データフレームに構造体列を追加しますが、構造体にはフィールド以上が追加されます。
ケースクラスはstructカラムに変更できますが、ケースクラスは22フィールド以下の制限があります(オンラインスパークは2.10.4のスカラで1.6.3です)。
できます通常のクラスこれを行いますか?私はどのような機能やインターフェイスを実装する必要がありますか?
"org.apache.spark.sql.functions.struct"もありますが、構造体のフィールドの名前を設定できないようです。 ありがとうございます。この構造体のためにケースクラスを定義する必要はありませんデータフレームに大きな構造体列を追加する方法

+0

は、UDFのために行く:私はあなたがすることができないことによって意味を理解しない//stackoverflow.com/questions/33826495/spark-scala-2-10-tuple-limit –

+0

を構造体のフィールド名を設定します。このようにすることができます val fields = new StructField( "name"、StringType、false)::新しいStructField( "age"、IntegerType、false)::リスト(新しいStructField( "age"、IntegerType、false)) – BDR

+0

ありがとうBalaji Reddy。今私はすでに約40の列を持つデータフレームを持っており、その型が構造体である新しい列を追加したい。既存の40個のフィールドと100個以上のフィールドを持つ新しい構造体を結ぶ新しい構造体を定義する必要があるのですか? – xuhai

答えて

2

データフレームを読んでいますが、構造体のフィールドの名前を設定することができないようですできます。

できます。たとえば:その可能.https場合

import org.apache.spark.sql.functions._ 

spark.range(1).withColumn("foo", 
    struct($"id".alias("x"), lit("foo").alias("y"), struct($"id".alias("bar"))) 
).printSchema 

root 
|-- id: long (nullable = false) 
|-- foo: struct (nullable = false) 
| |-- x: long (nullable = false) 
| |-- y: string (nullable = false) 
| |-- col3: struct (nullable = false) 
| | |-- bar: long (nullable = false) 
+1

ありがとう、それは私が欲しいものです。 – xuhai

0

、あなたはこのよう構造体の型を作成することができます

val struct = 
    StructType(
    StructField("a", IntegerType, true) :: 
    StructField("b", LongType, false) :: 
    StructField("c", BooleanType, false) :: Nil) 

この構造体には、任意の長さを持つことができます。

あなたは、このよう

val df = sparkSession.read.schema(struct).//your read method 
+0

あなたの答えをありがとう。今私はすでに約40の列を持つデータフレームを持っており、その型が構造体である新しい列を追加したい。既存の40個のフィールドと新しい構造体を結ぶ新しい構造体を定義する必要があるのですか? – xuhai

関連する問題