如果我理解正确,则可以将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))
}
感谢您的帮助。
亲切的问候,
约翰
答案 0 :(得分:1)
您的代码中有2个问题
withColumn
的第二个参数必须为Column
。您可以使用函数col
Spark无法将Any
作为其列类型,您需要使用特定的受支持类型。
val PropertiesDFPlusMultiDimArray = PropertiesDF.withColumn("ArrayCol", lit(Array.ofDim[Int](nrRows,nrCols)))
会成功的