//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
2条答案
按热度按时间osh3o9ms1#
您可以将Dataframe的内容保存为Parquet文件,并在另一个程序中读取相同的内容。您可以在下一个程序中注册为临时表。spark sql支持读取和写入Parquet文件,自动保留原始数据的模式。
c9qzyr3d2#
还可以使用saveastable命令将Dataframe作为持久表保存到配置单元元存储中。请注意,使用此功能不需要现有配置单元部署。spark将为您创建一个默认的本地配置单元元存储(使用derby)。与createorreplacetempview命令不同,saveastable将具体化dataframe的内容,并创建指向配置单元元存储中数据的指针。
即使在spark程序重新启动后,只要保持与同一元存储的连接,持久表仍然存在。持久表的Dataframe可以通过使用表的名称在sparksession上调用table方法来创建。
默认情况下,saveastable将创建一个“托管表”,这意味着数据的位置将由metastore控制。删除表时,托管表的数据也将自动删除。