sc *_* so 4 java apache-spark apache-spark-sql
有人可以给出public DataFrame createDataFrame(java.util.List<?> data,java.lang.Class<?> beanClass)
Spark JavaDoc中提到的Java 函数实现示例
吗?
我有一个JSON字符串列表,我作为第一个参数传递,因此我String.class作为第二个参数传递,但是它给出了一个错误
java.lang.ClassCastException: org.apache.spark.sql.types.StringType$ cannot be cast to org.apache.spark.sql.types.StructType
Run Code Online (Sandbox Code Playgroud)
不知道为什么,因此寻找一个例子。
问题是您使用Bean Class。
JavaBeans是将许多对象封装到一个对象(bean)中的类。它们是可序列化的,具有零参数构造函数,并允许使用getter和setter方法访问属性。给出了名称“ Bean”以包含该标准,该标准旨在为Java创建可重用的软件组件。
更清楚地说,让我给您一个在Spark中使用Java Bean的示例:
假设我们使用这个Bean类:
import java.io.Serializable;
public class Bean implements Serializable {
private static final long serialVersionUID = 1L;
private String k;
private String something;
public String getK() {return k;}
public String getSomething() {return something;}
public void setK(String k) {this.k = k;}
public void setSomething(String something) {this.something = something;}
}
Run Code Online (Sandbox Code Playgroud)
我们已经创造了b0和b1那些Bean的实例是:
Bean b0 = new Bean();
b0.setK("k0");
b0.setSomething("sth0");
Bean b1 = new Bean();
b1.setK("k1");
b1.setSomething("sth1");
Run Code Online (Sandbox Code Playgroud)
另外,我们已经将bean(b0,b1here)添加到一个List<Bean>被调用的对象中data:
List<Bean> data = new ArrayList<Bean>();
data.add(b0);
data.add(b1);
Run Code Online (Sandbox Code Playgroud)
现在我们可以创建一个DataFrameusing List<Bean>和Beanclass:
DataFrame df = sqlContext.createDataFrame(data, Bean.class);
Run Code Online (Sandbox Code Playgroud)
如果这样做df.show(),则输出如下:
+---+---------+
| k|something|
+---+---------+
| k0| sth0|
| k1| sth1|
+---+---------+
Run Code Online (Sandbox Code Playgroud)
从JSON STRING创建数据帧的更好方法
在Spark中,您可以直接DataFrame从JSON字符串列表创建:
DataFrame df = sqlContext.read().json(jsc.parallelize(data));
Run Code Online (Sandbox Code Playgroud)
jsc的实例在哪里JavaSparkContext?
| 归档时间: |
|
| 查看次数: |
7206 次 |
| 最近记录: |