如何从包含整数的JavaRDD
创建DataFrame
。我做了下面这样的事情,但没有工作。
List<Integer> input = Arrays.asList(101, 103, 105);
JavaRDD<Integer> inputRDD = sc.parallelize(input);
DataFrame dataframe = sqlcontext.createDataFrame(inputRDD, Integer.class);
我得到了ClassCastException
说org. apache.park.sql.types.IntegerType$不能转换为org.apache.park.sql.type.StructType
我怎样才能做到这一点?
显然(虽然不是直观的),这个createDataFrame
重载只能用于Bean类型,这意味着类型不对应于任何内置的SparkSQL类型。
你可以看到,在源代码中,你传递的类与JavaTypeIncentce.的SparkSQL类型匹配,结果被转换为
结构类型
(参见SQLContext. getSchema
中的dataType.asInstanceOf[结构类型]
-但是内置的“原始”类型(如IntegerType
)不是结构类型
…对我来说,看起来像是bug或未记录的行为….
工作方法:
>
用“bean”类包装您的
Integer
(我知道这很丑陋):
public static class MyBean {
final int value;
MyBean(int value) {
this.value = value;
}
public int getValue() {
return value;
}
}
List<MyBean> input = Arrays.asList(new MyBean(101), new MyBean(103), new MyBean(105));
JavaRDD<MyBean> inputRDD = sc.parallelize(input);
DataFrame dataframe = sqlcontext.createDataFrame(inputRDD, MyBean.class);
dataframe.show(); // this works...
转换为
RDD
// convert to Rows:
JavaRDD<Row> rowRdd = inputRDD.map(new Function<Integer, Row>() {
@Override
public Row call(Integer v1) throws Exception {
return RowFactory.create(v1);
}
});
// create schema (this looks nicer in Scala...):
StructType schema = new StructType(new StructField[]{new StructField("number", IntegerType$.MODULE$, false, Metadata.empty())});
DataFrame dataframe = sqlcontext.createDataFrame(rowRdd, schema);
dataframe.show(); // this works...
匿名用户
现在在Spark 2.2中,您可以执行以下操作来创建数据集。
Dataset<Integer> dataSet = sqlContext().createDataset(javardd.rdd(), Encoders.INT());
相关问题
- JavaHashMap内部数据结构在重新散列期间如何变化?
- 共享可观察数据的正确方式和地点是什么
- RxJava:防止一个可观察对象发射,直到另一个可观察对象的数据被发射
- Angular2/4:实时刷新数据
- 使用REST创建Jira问题API
- 为什么C函数可以创建可变长度的数组?
- 如何禁用RBP帧指针寄存器优化GCC时使用-O*?
- ARM帧指针寄存器(r11)不断变化
- main()有时在x86上使用-fomit-frame指针保留帧指针
- x86-64上C中的所有函数都需要堆栈帧吗?
- 如何在C中模拟堆栈帧?
- 创建一个不和谐机器人来播放. mp3文件
- 如何在discord.py?中为不和谐音乐机器人创建跳过命令
- 创建问题。jpack的EXE-当程序被EXE调用时jSoup的问题,但在Intellij中可以
- hashmap中的entrySet如何创建和修改?
- C:编译器如何知道为每个堆栈帧分配多少内存?
- Python不和谐音乐机器人-创建队列-自动播放下一首歌
- 每次“PoolingHttpClientConnectionManager”创建连接时,有没有办法调用方法?
- 将整数列表转换为逗号分隔的字符串
- 如何使用selenium WebDrive(java)抓取表中的数据?