如何将多维数组添加到现有的 Spark DataFrame

Posted

技术标签:

【中文标题】如何将多维数组添加到现有的 Spark DataFrame【英文标题】:How to add multidimensional array to an existing 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))

  

感谢您的帮助。

亲切的问候,

约翰

【问题讨论】:

【参考方案1】:

您的代码中有 2 个问题

    withColumn 的第二个参数必须是 Column。你可以用函数col 包装常量值

    Spark 不能将Any 作为其列类型,您需要使用特定支持的类​​型。

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

会成功的

【讨论】:

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

以上是关于如何将多维数组添加到现有的 Spark DataFrame的主要内容,如果未能解决你的问题,请参考以下文章

NodeJS 和 Mongoose:将元素添加到现有的空数组

如何使用 map() 或 foreach() 将新对象添加到现有的 useState 数组?

通过 Spark 将 csv 文件加载到现有的 HIVE 故事中

如何将 Mailchimp 添加到现有的注册框

如何将新行添加到现有的 QTablewidget

如何将熊猫数据添加到现有的 csv 文件中?