错误消息"应用程序不接受参数"在功能col

时间:2017-12-13 16:42:36

标签: scala apache-spark-sql

你好

我想创建一个包含多个组实例的列,其中每个组包含一个标签和一个groupValue。

import org.apache.spark.sql.functions.col

col("groupingCriteria"(0)("label"))
col("groupingCriteria"(0)("groupValue"))

Intellij在'标签'或者' groupValue' :"应用程序不接受参数"

当我使用$ spark of SparkSession.implicits._时,我没有此消息但我不想使用此关键字

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

通过查看您的要求,您似乎需要一个可以是ArrayType的列“组”。您可以先为此创建架构,然后应用于您的DataFrame。

以下代码创建一个包含两个父级别列id,group的模式(其中每个组根据您的要求包含一个标签和一个groupValue)。然后将模式推断为空的DataFrame,在实际情况下将被适当的数据替换。它可能会对你有帮助。

import org.apache.spark.sql.SparkSession
import org.apache.spark.sql.types.{ArrayType,StringType,StructField,StructType}
import org.apache.spark.sql.functions.col
import org.apache.spark.sql.Row

//build a spark session
val sparkSession = SparkSession.builder()
  .appName("myApp")
  .getOrCreate()

val sc = sparkSession.sparkContext

val myDfSchema = StructType(Seq(
  StructField("id", StringType, true),
  StructField("group", ArrayType(StructType(Array(
    StructField("label", StringType, true),
    StructField("groupValue", StringType, true)))), true)))

val myDf = sparkSession.createDataFrame(sc.emptyRDD[Row], myDfSchema)

架构如下所示。

scala> myDf.printSchema
root
 |-- id: string (nullable = true)
 |-- group: array (nullable = true)
 |    |-- element: struct (containsNull = true)
 |    |    |-- label: string (nullable = true)
 |    |    |-- groupValue: string (nullable = true)