Raj*_*dra 5 scala apache-spark
我有一个名为数组列表的数组,看起来像这样
arraylist: Array[(String, Any)] = Array((id,772914), (x4,2), (x5,24), (x6,1), (x7,77491.25), (x8,17911.77778), (x9,225711), (x10,17), (x12,6), (x14,5), (x16,5), (x18,5.0), (x19,8.0), (x20,7959.0), (x21,676.0), (x22,228.5068871), (x23,195.0), (x24,109.6015511), (x25,965.0), (x26,1017.79043), (x27,2.0), (Target,1), (x29,13), (x30,735255.5), (x31,332998.432), (x32,38168.75), (x33,107957.5278), (x34,13), (x35,13), (x36,13), (x37,13), (x38,13), (x39,13), (x40,13), (x41,7), (x42,13), (x43,13), (x44,13), (x45,13), (x46,13), (x47,13), (x48,13), (x49,14.0), (x50,2.588435821), (x51,617127.5), (x52,414663.9738), (x53,39900.0), (x54,16743.15781), (x55,105000.0), (x56,52842.29076), (x57,25750.46154), (x58,8532.045819), (x64,13), (x66,13), (x67,13), (x68,13), (x69,13), (x70,13), (x71,13), (x73,13), (...
Run Code Online (Sandbox Code Playgroud)
我想将它转换为具有两列"ID"和值的数据帧.这就是我正在使用的代码
val df = sc.parallelize(arraylist).toDF("Names","Values")
Run Code Online (Sandbox Code Playgroud)
但是我收到了一个错误
java.lang.UnsupportedOperationException: Schema for type Any is not supported
Run Code Online (Sandbox Code Playgroud)
我怎样才能克服这个问题?
消息告诉您所有内容:)任何不支持作为DataFrame列的类型.Anytype可以由nulls作为元组的第二个元素引起
将arraylist类型更改为Array[(String, Int)](如果您可以手动执行;如果由Scala扣除,则检查空值和第二个元素的无效值)或手动创建架构:
import org.apache.spark.sql.types._
import org.apache.spark.sql._
val arraylist: Array[(String, Any)] = Array(("id",772914), ("x4",2.0), ("x5",24.0));
val schema = StructType(
StructField("Names", StringType, false) ::
StructField("Values", DoubleType, false) :: Nil)
val rdd = sc.parallelize (arraylist).map (x => Row(x._1, x._2.asInstanceOf[Number].doubleValue()))
val df = sqlContext.createDataFrame(rdd, schema)
df.show()
Run Code Online (Sandbox Code Playgroud)
注意:createDataFrame需要RDD [Row],所以我将元组的RDD转换为Row的RDD
| 归档时间: |
|
| 查看次数: |
8418 次 |
| 最近记录: |