どのように既存のデータフレームからのデータフレームを作成し、構造体の種類などの特定のフィールドを作るには?

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]|
+-----+------------------+

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=193119&siteId=1