apache-spark - 将数据框中的结构类型列拆分为多列

标签 apache-spark apache-spark-sql

我使用reducebyKey从rdd创建了以下数据框。我想将第一列(最初是键)拆分为 2 个新列,并用逗号分隔。

scala> result_winr_table.schema
res10: org.apache.spark.sql.types.StructType = StructType(StructField(_1,StructType(StructField(_1,IntegerType,false), StructField(_2,IntegerType,false)),true), StructField(_2,DoubleType,false))

scala> result_winr_table
    res5: org.apache.spark.sql.DataFrame = [_1: struct<_1:int,_2:int>, _2: double]

    scala> result_winr_table.show
    +--------+-------------------+
    |      _1|                 _2|
    +--------+-------------------+
    | [31,88]|              0.475|
    | [18,91]| 0.5833333333333334|
    | [56,95]|0.37142857142857144|
    | [70,61]| 0.6266666666666667|
    |[104,11]| 0.4527911784975879|
    | [42,58]| 0.6857142857142857|
    | [13,82]| 0.3333333333333333|
    | [30,18]|0.49310344827586206|
    | [99,18]|0.44285714285714284|
    | [53,31]| 0.2981366459627329|
    | [52,84]| 0.4444444444444444|
    | [60,38]|               0.38|
    |  [79,9]|0.36666666666666664|
    | [20,85]| 0.4389312977099237|
    | [61,87]| 0.4807692307692308|
    |  [3,67]| 0.4245810055865922|
    | [62,84]|0.47796610169491527|
    |  [9,32]| 0.4727272727272727|
    | [94,44]| 0.5698324022346368|
    | [50,67]|0.45083487940630795|
    +--------+-------------------+

我尝试直接在列上使用 split 方法,但由于类型不匹配而不起作用。

实现这一目标的最佳方法是什么?

最佳答案

鉴于架构

root
 |-- _1: struct (nullable = true)
 |    |-- _1: integer (nullable = false)
 |    |-- _2: integer (nullable = false)
 |-- _2: double (nullable = false)

您可以使用withColumn api,如下所示

result_winr_table.withColumn("first", $"_1._1")
  .withColumn("second", $"_1._2")

如果您不需要原始列,可以使用 .drop("_1")

关于apache-spark - 将数据框中的结构类型列拆分为多列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45448252/

相关文章:

python - PySpark:获取数据框中每一行的前 k 列

apache-spark - 在多个列上应用自定义 Spark 聚合器 (Spark 2.0)

amazon-web-services - EMR/Spark的S3写入时间极慢

java - 数据帧解析少量数据的速度很慢

apache-spark - pySpark 本地模式 - 使用文件 :///vs relative path 加载文本文件

mysql - 如何选择不在 GROUP BY 子句或聚合函数中的列?

scala - 如何使用 Scala 从 Spark 更新 ORC Hive 表

python - 如何将 Spark 数据框推送到 Elastic Search (Pyspark)

apache-spark - Spark RangeBetween 如何使用降序排列?

python - Spark 中的分组和标准化