ADARSH K:
私は、同様のスキーマを変更する必要のある既存のデータフレームからのデータフレームを作成する必要があります。
私は、データフレームなどがあります。
+-----------+----------+-------------+
|Id |Position |playerName |
+-----------+-----------+------------+
|10125 |Forward |Messi |
|10126 |Forward |Ronaldo |
|10127 |Midfield |Xavi |
|10128 |Midfield |Neymar |
そして私は、下記のケースクラスを使用して、これを作成しています:
case class caseClass (
Id: Int = "",
Position : String = "" ,
playerName : String = ""
)
今、私は両方のようにする必要がありプレイヤー名や位置を構造体タイプの下。
すなわち、
私は、スキーマを別のデータフレームを作成する必要があります
ルート
| - イド:int型(NULL可能=真)
| - playerDetails:構造体(NULL可能=真)
| | --playername:文字列(NULL可能=真)
| | --position:文字列(NULL可能=真)
私は、リンクを参照して、新たなデータフレームを作成するには、次のコードをしたhttps://medium.com/@mrpowers/adding-structtype-columns-to-spark-dataframes-b44125409803
MYSCHEMAました
List(
StructField("Id", IntegerType, true),
StructField("Position",StringType, true),
StructField("playerName", StringType,true)
)
私は、次のコードを試してみました
spark.sparkContext.parallelize(data),
myschema
)
しかし、私はそれを実現することができません。
私は同様の質問を見た既存のデータフレームの変更スキーマを、私は解決策を理解することはできません。
直接ケースクラス内StructTypeを実装するために任意の解決策はありますか?私が思うことを私は、構造体の型の値を作成するための独自のスキーマを作成する必要はありません。
Ps70l:
機能「構造体」を使用することができます。
// data
val playersDF = Seq(
(10125, "Forward", "Messi"),
(10126, "Forward", "Ronaldo"),
(10127, "Midfield", "Xavi"),
(10128, "Midfield", "Neymar")
).toDF("Id", "Position", "playerName")
// action
val playersStructuredDF = playersDF.select($"Id", struct("playerName", "Position").as("playerDetails"))
// display
playersStructuredDF.printSchema()
playersStructuredDF.show(false)
出力:
root
|-- Id: integer (nullable = false)
|-- playerDetails: struct (nullable = false)
| |-- playerName: string (nullable = true)
| |-- Position: string (nullable = true)
+-----+------------------+
|Id |playerDetails |
+-----+------------------+
|10125|[Messi, Forward] |
|10126|[Ronaldo, Forward]|
|10127|[Xavi, Midfield] |
|10128|[Neymar, Midfield]|
+-----+------------------+