如何在 Spark 中获取 WrappedArray 的第一个值?
How to get first value of WrappedArray in Spark?
我按几列分组并从这些列中得到 WrappedArray
正如您在架构中看到的那样。如何摆脱它们,以便我可以继续下一步并执行 orderBy
?
val sqlDF = spark.sql("SELECT * FROM
parquet.`parquet/20171009121227/rels/*.parquet`")
获取数据帧:
val final_df = groupedBy_DF.select(
groupedBy_DF("collect_list(relev)").as("rel"),
groupedBy_DF("collect_list(relev2)").as("rel2"))
然后打印模式给我们:final_df.printSchema
|-- rel: array (nullable = true)
| |-- element: double (containsNull = true)
|-- rel2: array (nullable = true)
| |-- element: double (containsNull = true)
当前输出示例:
我正在尝试转换为:
|-- rel: double (nullable = true)
|-- rel2: double (nullable = true)
期望的示例输出(来自上图):
-1.0,0.0
-1.0,0.0
尝试 col(x).getItem
:
groupedBy_DF.select(
groupedBy_DF("collect_list(relev)").as("rel"),
groupedBy_DF("collect_list(relev2)").as("rel2")
).withColumn("rel_0", col("rel").getItem(0))
如果 collect_list
总是只有 return 一个值,请改用 first
。那么就不需要处理有Array的问题了。请注意,这应该在 groupBy
步骤中完成。
val spark = SparkSession.builder.getOrCreate()
import spark.implicits._
val final_df = df.groupBy(...)
.agg(first($"relev").as("rel"),
first($"relev2").as("rel2"))
尝试拆分
import org.apache.spark.sql.functions._
val final_df = groupedBy_DF.select(
groupedBy_DF("collect_list(relev)").as("rel"),
groupedBy_DF("collect_list(relev2)").as("rel2"))
.withColumn("rel",split("rel",","))
我按几列分组并从这些列中得到 WrappedArray
正如您在架构中看到的那样。如何摆脱它们,以便我可以继续下一步并执行 orderBy
?
val sqlDF = spark.sql("SELECT * FROM
parquet.`parquet/20171009121227/rels/*.parquet`")
获取数据帧:
val final_df = groupedBy_DF.select(
groupedBy_DF("collect_list(relev)").as("rel"),
groupedBy_DF("collect_list(relev2)").as("rel2"))
然后打印模式给我们:final_df.printSchema
|-- rel: array (nullable = true)
| |-- element: double (containsNull = true)
|-- rel2: array (nullable = true)
| |-- element: double (containsNull = true)
当前输出示例:
我正在尝试转换为:
|-- rel: double (nullable = true)
|-- rel2: double (nullable = true)
期望的示例输出(来自上图):
-1.0,0.0
-1.0,0.0
尝试 col(x).getItem
:
groupedBy_DF.select(
groupedBy_DF("collect_list(relev)").as("rel"),
groupedBy_DF("collect_list(relev2)").as("rel2")
).withColumn("rel_0", col("rel").getItem(0))
如果 collect_list
总是只有 return 一个值,请改用 first
。那么就不需要处理有Array的问题了。请注意,这应该在 groupBy
步骤中完成。
val spark = SparkSession.builder.getOrCreate()
import spark.implicits._
val final_df = df.groupBy(...)
.agg(first($"relev").as("rel"),
first($"relev2").as("rel2"))
尝试拆分
import org.apache.spark.sql.functions._
val final_df = groupedBy_DF.select(
groupedBy_DF("collect_list(relev)").as("rel"),
groupedBy_DF("collect_list(relev2)").as("rel2"))
.withColumn("rel",split("rel",","))