2016-06-24 5 views
2

Spark JavaDoc에서 언급 한대로 public DataFrame createDataFrame(java.util.List<?> data,java.lang.Class<?> beanClass) Java 구현 예의 예를 제공 할 수 있습니까?Apache Spark, 첫 번째 인수로 <?>리스트를 사용하는 Java에서 createDataFrame 예제

는 내가 첫 번째 인수로 전달하고 따라서 내가 두 번째 인수로 String.class를 전달하고 JSON 문자열 목록을 가지고 있지만 따라서 예를 찾는 이유, 그것은 오류를 제공

java.lang.ClassCastException: org.apache.spark.sql.types.StringType$ cannot be cast to org.apache.spark.sql.types.StructType 

하지 않도록 .

답변

-3

많은 예제가있는 곳에서 스파크 소스 코드를 살펴 보도록하겠습니다. 단위 테스트에서 특히 의 모든 참조는 java here에 있습니다.

2

문제는 빈 클래스을 사용하는 것입니다. JavaBeans Wikipedia에서

:

자바 빈즈는 하나의 객체 (콩)에 많은 개체를 캡슐화하는 클래스입니다. 그것들은 직렬화 가능하고, 0 인수 인 생성자를 가지며 getter와 setter 메소드를 사용하여 속성에 대한 액세스를 허용합니다. "Bean"이라는 이름은이 표준을 포함하도록 주어졌으며, 은 Java 용 재사용 가능한 소프트웨어 구성 요소를 만드는 것을 목표로합니다.

가정 해 우리가이 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;} 
} 

을 우리는 b0b1을 만들었습니다 Bean의 인스턴스 by

Bean b0 = new Bean(); 
b0.setK("k0"); 
b0.setSomething("sth0"); 
Bean b1 = new Bean(); 
b1.setK("k1"); 
b1.setSomething("sth1"); 

또한 콩 (b0, 여기) data라는 List<Bean>b1는 :

이제
List<Bean> data = new ArrayList<Bean>(); 
data.add(b0); 
data.add(b1); 

우리는 DataFrame 사용을 만들 수 있습니다 List<Bean>Bean 클래스 :

+---+---------+ 
| k|something| 
+---+---------+ 
| k0|  sth0| 
| k1|  sth1| 
+---+---------+ 
: 우리가 df.show()을, 여기에 출력이

DataFrame df = sqlContext.createDataFrame(data, Bean.class); 

입니다

데이터 프레임을 만드는 더 나은 방법 스파크에서 JSON 문자열

로부터, 직접 JSON 문자열의 목록에서 DataFrame을 만들 수 있습니다 jscJavaSparkContext의 인스턴스

DataFrame df = sqlContext.read().json(jsc.parallelize(data)); 

.