2017-05-20 2 views
2

작동하지이 데이터가 반환스파크 SQL 명령은 두 배

var cleanDF = spark.sql("select * from readingsDF where STR > -1") 

두 문은 동일해야합니다.

readingsDF.printSchema() 
root 
|-- STR: double (nullable = true) 
|-- OBS: double (nullable = true) 
|-- AGMT: double (nullable = true) 
|-- FNDX: double (nullable = true) 
|-- HIGD: double (nullable = true) 
|-- DEG: double (nullable = true) 
|-- CHK: double (nullable = true) 
|-- AGP1: double (nullable = true) 
|-- AGMN: double (nullable = true) 
|-- NLV: double (nullable = true) 
|-- LIV: double (nullable = true) 
|-- WT: double (nullable = true) 
|-- AGLP: double (nullable = true) 
|-- MST: double (nullable = true) 
+0

_ "이 데이터를 반환합니다."_ 그리고 다른 SQL 쿼리는 확인하지 않습니까? –

+0

_ "Spark SQL 명령이 double으로 작동하지 않습니다"_라고 말하면 오류가 무엇입니까? –

+1

글쎄 지금은 이걸 실행하고 작동합니다 : VAL cleanDF = spark.sql ("select * from readingsDF where STR> -1"). 그래서이 문제는 제가 뭔가를 남겨 놓았 음에 틀림 없으므로 닫아야합니다. (하지만 다시 한 번 그랬다면 약간의 오류가 있었을 것입니다.) –

답변

1

당신이 SQL 쿼리를

readingsDF.registerTempTable("readingsDF") //for older version 

readingsDF.createOrReplaceTempView("readingsDF") 

를 수행하기 전에 SQL을 수행보다 임시 table 등록이 또 다른 옵션은 호출하는 것입니다

var cleanDF = spark.sql("select * from readingsDF where STR > -1") 
+0

당신은 요점을 보았습니다, 이것은 완벽하게 작동해야합니다 –

0

조회 : 여기

스키마입니다 Dataset.createGlobalTempView 메토 D, 샨의 일이 솔루션 사이에 @ 차이는 다음

Dataset.createGlobalTempView의 문서는 말한다 :

지정된 이름을 사용하여 전역 임시 뷰를 작성합니다. 이 임시보기의 수명은이 Spark 응용 프로그램과 관련되어 있습니다.

전역 임시보기는 세션 간입니다. 수명은 Spark 애플리케이션의 수명이며, 애플리케이션이 종료되면 자동으로 삭제됩니다. 그것은 시스템에 보존 된 데이터베이스 _global_temp와 연결되어 있으며 한정된 이름을 사용하여 전역 임시보기를 참조해야합니다. SELECT * FROM _global_temp.view1. 대신 Dataset.createOrReplaceTempView 방법의

:

지정된 이름을 사용하여 로컬 임시 뷰를 작성합니다. 이 임시 뷰의 수명은이 데이터 집합을 만드는 데 사용 된 SparkSession에 연결됩니다.

그래서 해결책은 그런 일이 될 것입니다 :

readingsDF.createGlobalTempView("readingsDF") 
var cleanDF = spark.sql("select * from _global_temp.readingsDF where STR > -1") 
1

TL; DR이 모두 문을 해당 될 수 있지만 일반적으로 을하지 않습니다 수 있습니다.

두 이름은 서로 다른 범위에 있으며 동일한 데이터 집합을 참조 할 수도 있지만 그렇게하지 않을 수도 있습니다.

readingsDFval readingsDF은 Scala의 값입니다. 나는 이라고 생각합니다.입니다. DataFrame입니다. 다음과 같이 CSV 파일에 데이터 세트를 가리 수 : select * from readingsDF where STR > -1에서

val readingsDF = spark.read.csv("dataset.csv") 

readingsDF은 스파크 SQL 응용 프로그램에서 관계 기관의 카탈로그에 등록 된 테이블 또는 뷰입니다. 위의 스칼라 값을 포함하여 아무 것도 될 수 있지만 반드시 필요하지는 않습니다.

당신은 당신의 코드에서 다음 수 :

readingsDF.createOrReplaceTempView("readingsDF") 

를 만 다음 말할 수있는 동일한 데이터 세트에 readingsDF의 두 점.

다음과 같은 내용이있을 수도 있고 동일한 데이터 세트를 가리 키지 않을 수도 있습니다.

spark.range(5).createOrReplaceTempView("readingsDF")