2016-08-09 69 views
2

In Funken 1.6.2 Ich bin in der Lage lokale Parkett-Dateien zu lesen, sehr einfach, indem Sie:Lese lokale Parkett Dateien in Spark-2.0

SQLContext sqlContext = new SQLContext(new SparkContext("local[*]", "Java Spark SQL Example")); 
DataFrame parquet = sqlContext.read().parquet("file:///C:/files/myfile.csv.parquet"); 
parquet.show(20); 

Ich versuche 2.0.0 zu aktualisieren Spark und erreichen die gleiche durch laufen:

SparkSession spark = SparkSession.builder().appName("Java Spark SQL Example").master("local[*]").getOrCreate(); 
Dataset<Row> parquet = spark.read().parquet("file:///C:/files/myfile.csv.parquet"); 
parquet.show(20); 

die auf Windows läuft, von IntelliJ (Java-Projekt), und ich bin nicht gerade einen hadoop-Cluster verwenden (es wird später kommen, aber im Moment bin ich nur versucht, zu erhalten die Logik der Verarbeitung richtig und sich mit den APIs vertraut machen). Leider

, wenn sie mit Funken 2.0 laufen, gibt der Code eine Ausnahme:

Exception in thread "main" java.lang.IllegalArgumentException: java.net.URISyntaxException: Relative path in absolute URI: file:C:/[my intellij project path]/spark-warehouse 
at org.apache.hadoop.fs.Path.initialize(Path.java:206) 
at org.apache.hadoop.fs.Path.<init>(Path.java:172) 
at org.apache.spark.sql.catalyst.catalog.SessionCatalog.makeQualifiedPath(SessionCatalog.scala:114) 
at org.apache.spark.sql.catalyst.catalog.SessionCatalog.createDatabase(SessionCatalog.scala:145) 
at org.apache.spark.sql.catalyst.catalog.SessionCatalog.<init>(SessionCatalog.scala:89) 
at org.apache.spark.sql.internal.SessionState.catalog$lzycompute(SessionState.scala:95) 
at org.apache.spark.sql.internal.SessionState.catalog(SessionState.scala:95) 
at org.apache.spark.sql.internal.SessionState$$anon$1.<init>(SessionState.scala:112) 
at org.apache.spark.sql.internal.SessionState.analyzer$lzycompute(SessionState.scala:112) 
at org.apache.spark.sql.internal.SessionState.analyzer(SessionState.scala:111) 
at org.apache.spark.sql.execution.QueryExecution.assertAnalyzed(QueryExecution.scala:49) 
at org.apache.spark.sql.Dataset$.ofRows(Dataset.scala:64) 
at org.apache.spark.sql.SparkSession.baseRelationToDataFrame(SparkSession.scala:382) 
at org.apache.spark.sql.DataFrameReader.load(DataFrameReader.scala:143) 
at org.apache.spark.sql.DataFrameReader.parquet(DataFrameReader.scala:427) 
at org.apache.spark.sql.DataFrameReader.parquet(DataFrameReader.scala:411) 
at lili.spark.ParquetTest.main(ParquetTest.java:15) 
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
at java.lang.reflect.Method.invoke(Method.java:497) 
at com.intellij.rt.execution.application.AppMain.main(AppMain.java:144) 
Caused by: java.net.URISyntaxException: Relative path in absolute URI: file:C:/[my intellij project path]/spark-warehouse 
at java.net.URI.checkPath(URI.java:1823) 
at java.net.URI.<init>(URI.java:745) 
at org.apache.hadoop.fs.Path.initialize(Path.java:203) 
... 21 more 

Ich habe keine Ahnung, warum es zu versuchen, etwas in-Verzeichnis mein Projekt zu berühren - gibt es wenig Konfiguration, die ich fehle das war in Spark 1.6.2 vernünftig voreingestellt, ist aber in 2.0 nicht mehr der Fall? Mit anderen Worten, was ist der einfachste Weg, um eine lokale Parkettdatei in Spark 2.0 auf Windows zu lesen?

Antwort

2

Es sieht aus wie Sie in SPARK-15893 laufen. Die Spark-Entwickler änderten den Dateistand von 1.6.2 auf 2.0.0. Aus den Kommentaren auf dem JIRA, sollten Sie auf die conf \ Funken defaults.conf Datei gehen und fügen Sie in:

"spark.sql.warehouse.dir=file:///C:/Experiment/spark-2.0.0-bin-without-hadoop/spark-warehouse" 

Sie sollten dann in der Lage sein, eine Parkett-Datei zu laden, wie so:

DataFrame parquet = sqlContext.read() 
     .parquet("C:/files/myfile.csv.parquet"); 
+0

Vielen Dank! Ich muss aufhören zu glauben, dass neue Releases von Open-Source-Projekten fehlerfrei sind und ihre JIRAs überprüfen;) Das Verzeichnis kann tatsächlich auf irgendetwas gesetzt werden (benötigt keine hadoop-Installation) und kann auch über die Systemeigenschaft eingestellt werden verknüpfte JIRA https://issues.apache.org/jira/browse/SPARK-15899. – Lili