gpt4 book ai didi

scala - Spark Scala 2.10 元组限制

转载 作者:行者123 更新时间:2023-12-04 16:24:43 24 4
gpt4 key购买 nike

我有 66 列要处理的 DataFrame(几乎每个列值都需要以某种方式更改)所以我正在运行以下语句

    val result = data.map(row=> (
modify(row.getString(row.fieldIndex("XX"))),
(...)
)
)

直到第 66 列。
由于此版本中的 scala 限制为 22 对的最大元组,因此我无法像那样执行此操作。
问题是,有什么解决方法吗?
在所有行操作之后,我将其转换为具有特定列名的 df
   result.toDf("c1",...,"c66")
result.storeAsTempTable("someFancyResult")

“修改”功能只是一个例子来表明我的观点

最佳答案

如果您所做的只是修改现有 DataFrame 中的值最好使用 UDF 而不是映射到 RDD:

import org.apache.spark.sql.functions.udf

val modifyUdf = udf(modify)
data.withColumn("c1", modifyUdf($"c1"))

如果由于某种原因上述不符合您的需求,您可以做的最简单的事情就是重新创建 DataFrame来自 RDD[Row] .例如像这样:
import org.apache.spark.rdd.RDD
import org.apache.spark.sql.Row
import org.apache.spark.sql.types.{StructField, StructType, IntegerType}


val result: RDD[Row] = data.map(row => {
val buffer = ArrayBuffer.empty[Any]

// Add value to buffer
buffer.append(modify(row.getAs[String]("c1")))

// ... repeat for other values

// Build row
Row.fromSeq(buffer)
})

// Create schema
val schema = StructType(Seq(
StructField("c1", StringType, false),
// ...
StructField("c66", StringType, false)
))

sqlContext.createDataFrame(result, schema)

关于scala - Spark Scala 2.10 元组限制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33826495/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com