当前位置: 首页 > 知识库问答 >
问题:

如何从现有的Dataframe创建Dataframe,并将特定的字段作为结构类型?

穆才良
2023-03-14
+-----------+----------+-------------+
|Id         |Position   |playerName  |
+-----------+-----------+------------+
|10125      |Forward    |Messi       |
|10126      |Forward    |Ronaldo     |
|10127      |Midfield   |Xavi        |
|10128      |Midfield   |Neymar      |
case class caseClass (
                       Id: Int = "",
                       Position : String = "" ,
                       playerName : String = "" 
                     )
  List(
    StructField("Id", IntegerType, true),
    StructField("Position",StringType, true),
    StructField("playerName", StringType,true)
)
  spark.sparkContext.parallelize(data),
  myschema
)

共有1个答案

有德业
2023-03-14
// 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]|
+-----+------------------+
 类似资料:
  • 我有一个平面数据帧(),结构如下: 我需要将这个数据帧转换为如下结构(因为我的下一个数据将采用这种格式): 到目前为止,我已经实现了: 我可以看到为生成的正确架构,但它在我尝试获取一些实际数据的最后一行给出了错误。我收到一个错误,说无法执行用户定义的函数。 有没有更好的方法来实现这一目标?

  • 我有一个具有如下结构的数据帧: 但是是Any类型,我无法提取它的任何字段。有人能说出我做错了什么,或者我应该遵循什么方法来代替这个吗? 谢谢

  • 我试图从一个简单的熊猫数据流创建一个火花数据流。这是我遵循的步骤。 在这之前一切都好。输出为: Spark UI 版本:V2.4.0 主人:本地[*]

  • 问题内容: 我有一个带有2 ArrayType字段的PySpark DataFrame: 我想将它们合并为一个ArrayType字段: 适用于字符串的语法在这里似乎不起作用: 谢谢! 问题答案: 火花 > = 2.4 您可以使用功能(SPARK-23736): 要保留其中一个值时的数据,可以使用: 火花 <2.4 不幸的是,一般情况下要串联列,您将需要一个UDF,例如: 可以用作:

  • 我有以下类别的< code>Dataframe列: 如何创建新列并将转换为:

  • 如何合并数组中的所有结构并生成合并的结构? 例如,使用SparkSQL,我能够读取源json文件并生成数组类型的列,数组中的每个元素都包含一个键:值对。例如,假设我们有一个ArrayType列的值,该列的名称为,值为: 我需要将这个数组类型的列转换为结构类型,其值为{a:1,b:2,c:3}。 由于我是通过读取JSON文件获得模式的,所以我可以使用派生序号获得结果,如: 这个解决方案的问题是,如果