2

Я новичок в мире искры. Как мы можем сохранить Dataframe, чтобы мы могли использовать его через компоненты.Сохраняющаяся свеча Dataframe

У меня поток Kafka, из которого я создаю Dataframe через Rdd.Tried RegisterAsTempTable, но таблица недоступна в другой программе.

Я хочу получить доступ к этой Dataframe в другом классе через sqlContext и использовать результат запроса для дальнейших вычислений.

ответ

1

Вы можете сохранить содержимое DataFrame в виде файла Parquet и прочитать его в другой программе. вы можете зарегистрироваться в качестве таблицы Temp в следующей программе. Spark SQL обеспечивает поддержку как для чтения, так и для записи файлов Parquet, которые автоматически сохраняют схему исходных данных.

//First Program 
dataframe.write.format("parquet").save("/tmp/xyz-dir/card.parquet") 
//where /tmp/xyz-dir/ is a HDFS directory 

//Second Program 
val parquetRead = sqlContext.read.format("parquet").load("/tmp/xyz-dir/card.parquet") 

//Parquet files can also be registered as tables and then used in SQL statements. 
parquetRead.registerTempTable("parquettemptable") 
val cust= sqlContext.sql("SELECT name FROM parquettemptable") 

//After use of parquet file, delete the same in the second program 
val fs = org.apache.hadoop.fs.FileSystem.get(new java.net.URI("hdfs://hostname:8030"), sc.hadoopConfiguration) 
fs.delete(new org.apache.hadoop.fs.Path("/tmp/xyz-dir"),true) // isRecusrive= true 
+0

val cdrDF = rdd.map (PaymentProcessor.parseCallCreditCardRecord) .toDF() \ когда я попробовал cdrDF.saveAsParquetFile ("datafile.parquet", "/ tmp/xyz-dir /"), я вижу ошибку компилятора. Можете ли вы направляйте меня, если здесь что-то не хватает. –

+1

@BindumaliniKK saveAsParquetFile Устаревший (начиная с версии 1.4.0) Используйте write.parquet (путь) [см.] (Https://spark.apache.org/docs/1.4.0/sql-programming-guide.html) и [1.3 подход] (https://spark.apache.org/docs/1.3.0/sql-programming-guide.html), Arvind PLS изменить соответствующим образом –

+0

Я столкнулся с исключением: INFO org.apache.spark.sql.execution.datasources .parquet.ParquetRelation - Файл с листингами: /SparkSpace/PaymentCardFraudResearch/card.parquet на драйвере Исключение в потоке "main" java.lang.AssertionError: утверждение не выполнено: не найдено предопределенной схемы и нет файлов данных Parquet или итоговых файлов, найденных в файле : /SparkSpace/PaymentCardFraudResearch/card.parquet. \t at scala.Predef $ .assert (Predef.scala: 179) –

2

DataFrames также может быть saved как постоянные таблицы в метафоре улья с использованием команды saveAsTable. Обратите внимание, что для использования этой функции не требуется развертывание Hive. Spark создаст локальный метастар Hive по умолчанию (используя Derby) для вас. В отличие от команды createOrReplaceTempView, saveAsTable будет материализовать содержимое DataFrame и создать указатель на данные в метафоре улья.

Стойкие таблицы будут существовать даже после перезапуска программы Spark, если вы поддерживаете соединение с тем же метасторе. DataFrame для постоянной таблицы может быть создан путем вызова метода таблицы на SparkSession с именем таблицы.

По умолчанию saveAsTable создаст «управляемую таблицу», что означает, что местоположение данных будет контролироваться метасторе. Управляемые таблицы также будут автоматически удалять свои данные при отбрасывании таблицы.

+0

Я также попробовал SaveAsTable ("tablename"). Но опять же, получилось исключение таблицы не найденное, когда я попытался получить таблицу в другой программе, используя sqlContext. –

+0

Вы используете тот же самый магазин кустов? –

+0

Я узнал в одном из обсуждений, что использование hivecontext вместо sqlcontext будет сохраняться в таблице, к которой можно получить доступ через компоненты. Поэтому я создал HiveContect и использовал hiveContext.saveTable («таблица»). Я не знаю много о Hive. Будет большой помощью, чтобы помочь мне, как мы будем настраивать мета-магазин. –

Смежные вопросы