我刚接触Spark。我们如何将Dataframe持久化,以便我们可以在组件之间使用它。
我有一个Kafka流,通过Rdd生成Dataframe。尝试注册为临时表,但另一个程序中无法访问该表。
我想通过sqlContext在另一个类中访问此Dataframe,并使用查询结果进行进一步的计算。
我刚接触Spark。我们如何将Dataframe持久化,以便我们可以在组件之间使用它。
我有一个Kafka流,通过Rdd生成Dataframe。尝试注册为临时表,但另一个程序中无法访问该表。
我想通过sqlContext在另一个类中访问此Dataframe,并使用查询结果进行进一步的计算。
您可以将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