【问题标题】:How to add multidimensional array to an existing Spark DataFrame如何将多维数组添加到现有的 Spark DataFrame
【发布时间】:2018-10-30 19:55:22
【问题描述】:

如果我理解正确,可以将 ArrayType 添加为 Spark DataFrame 列。我正在尝试使用 withColumn 方法将多维数组添加到现有的 Spark DataFrame 中。我的想法是让这个数组可用于每个 DataFrame 行,以便使用它从 map 函数发回信息。

我得到的错误是 withColumn 函数正在寻找 Column 类型,但它正在获取一个数组。是否有任何其他功能可以添加ArrayType

    object TestDataFrameWithMultiDimArray {
  val nrRows = 1400
  val nrCols = 500

  /** Our main function where the action happens */
  def main(args: Array[String]) {

    // Create a SparkContext using every core of the local machine, named RatingsCounter
    val sc = new SparkContext("local[*]", "TestDataFrameWithMultiDimArray")  
    val sqlContext = new SQLContext(sc)

    val PropertiesDF = sqlContext.read
    .format("com.crealytics.spark.excel")
    .option("location", "C:/Users/tjoha/Desktop/Properties.xlsx")
    .option("useHeader", "true")
    .option("treatEmptyValuesAsNulls", "true")
    .option("inferSchema", "true")
    .option("addColorColumns", "False")
    .option("sheetName", "Sheet1")
    .load()

    PropertiesDF.show()
    PropertiesDF.printSchema()

    val PropertiesDFPlusMultiDimArray = PropertiesDF.withColumn("ArrayCol", Array.ofDim[Any](nrRows,nrCols))

  }

感谢您的帮助。

亲切的问候,

约翰

【问题讨论】:

    标签: apache-spark apache-spark-sql apache-spark-dataset


    【解决方案1】:

    您的代码中有 2 个问题

    1. withColumn 的第二个参数必须是 Column。你可以用函数col 包装常量值
    2. Spark 不能将Any 作为其列类型,您需要使用特定支持的类​​型。

      val PropertiesDFPlusMultiDimArray = PropertiesDF.withColumn("ArrayCol", lit(Array.ofDim[Int](nrRows,nrCols)))

    会成功的

    【讨论】:

    • 您好,谢谢您的回答。 lit() 是做什么的?我的最终目标是为 DataFrame 中的每一行数据计算多行多列的值,并将其作为数组返回。数组中会有多种不同类型的数据,包括字符串、整数和浮点数。您对实现此类功能有任何想法吗?另外,您在上面设置的数组是否与多维数组兼容?一旦我得到答案,我将创建一个新帖子,因为答案会引发新问题。
    • 我看到 lit() 创建了一列文字值。
    • @TJVR 静态类型语言中的数组对于所有元素总是具有相同的类型。也许您想为此列创建一个新的StructType,或者将所有数组分别添加为一列?
    • 哇,您是如何挖掘出在literal 函数中指定类型的能力?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-07-22
    • 2021-06-11
    • 1970-01-01
    • 2021-03-10
    • 1970-01-01
    • 2016-02-06
    • 2020-02-06
    相关资源
    最近更新 更多