Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-cloud-platform/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Apache spark 删除Dataproc上的群集后,Apache Spark检索存储在gcs中的表_Apache Spark_Google Cloud Platform_Pyspark_Jupyter Notebook_Google Cloud Dataproc - Fatal编程技术网

Apache spark 删除Dataproc上的群集后,Apache Spark检索存储在gcs中的表

Apache spark 删除Dataproc上的群集后,Apache Spark检索存储在gcs中的表,apache-spark,google-cloud-platform,pyspark,jupyter-notebook,google-cloud-dataproc,Apache Spark,Google Cloud Platform,Pyspark,Jupyter Notebook,Google Cloud Dataproc,我是谷歌云控制台的新手,所以这可能是一个微不足道的问题。 我在数据科学项目中使用免费的分层gcp。我正在dataproc集群上运行python笔记本。 我使用pyspark作为spark数据帧加载存储在外部gcs存储桶中的数据,并使用“路径”选项将其存储为与我的项目关联的gcs存储桶中“df.repartition(100).write.saveAsTable()”格式的分区表。 在此之后,我删除了我的集群并创建了一个新集群。 现在,我无法使用pyspark从我的gcs存储桶中加载分区表。我甚至

我是谷歌云控制台的新手,所以这可能是一个微不足道的问题。 我在数据科学项目中使用免费的分层gcp。我正在dataproc集群上运行python笔记本。 我使用pyspark作为spark数据帧加载存储在外部gcs存储桶中的数据,并使用“路径”选项将其存储为与我的项目关联的gcs存储桶中“df.repartition(100).write.saveAsTable()”格式的分区表。 在此之后,我删除了我的集群并创建了一个新集群。 现在,我无法使用pyspark从我的gcs存储桶中加载分区表。我甚至将SparkSession配置“spark.sql.warehouse.dir”位置设置为以前保存表的路径。 但是,即使在使用“spark.sql.warehouse.dir”关闭并重新启动SparkSession后,我仍然能够访问创建分区表的集群中的分区表,并访问保存的表路径(使用spark.sql)。但由于某些原因,我无法在删除并创建新集群后执行相同的操作。 请帮忙。 我花了几个小时,但什么也找不到。 编辑: 代码截图


问题在于表元数据存储在Hive metastore中,请参见此。删除集群后,元数据随metastore一起消失,但数据保留在GCS中

在新集群中,您可以首先直接读取GCS文件,例如:

df = spark.read.orc('gs://path-to-folder')
然后为进一步查询创建临时视图,请参见以下内容:


我尝试了spark.read.orc(“gs://path to bucket\uuuo folder”),它对我很有效。

首先,您可以运行
gsutil ls
来验证您的数据是否存在吗?第二,你能提供一个用于保存和读取的代码示例,以便我可以帮助复制。数据就在那里。我可以使用控制台看到它。问题是,我想查询分区表,如“spark.sql(“select*from table_name”)”,只要我没有关闭创建它的集群,我就可以这样做。在新创建的集群中运行上述查询会说“table _name不存在”。有趣的是,我可以通过关闭当前spark会话并在新会话中运行它来运行上述查询,方法是将仓库位置设置在新路径中,如问题中所述。我知道,删除集群后,表元数据将丢失。您需要重新创建指向数据的表架构。我如何才能做到这一点?您能帮忙吗?这个表在gcs存储桶中保存为100个分区。如何将它们作为单个表检索?顺便说一句,我想将源文件作为数据帧加载,并通过重新分区将其保存为“orc”格式的表,这样,当我关闭集群时,我仍然拥有该表,而无需再次经历漫长的加载过程。原始文件相当大。创建数据帧时,Spark实际上不会获取数据。只要您不显示所有数据,就会在所有工作节点上对其进行惰性评估,并且只将必要的数据获取到驱动程序(主节点)。您应该能够指定文件夹
gs://path to folder/
,它将加载所有文件。我尝试读取了bucket中的“.jsonl.gz”和“.orc”文件,我收到了相同的错误:“ParseException:“\nIsmatched input”来自“expecting(第1行,第9位)\n\n==SQL==SELECT*from orc.”gs://joel\u twitter\u data/tables/part-00000-1a1578ff-545f-4329-88f7-30fe8f20d3af-c000.snappy.orc'\n-------^^^\n”“。”。SparkSession中是否有需要设置的特殊配置?嘿,知道如何将多个JSON文件快速读取到一个数据帧中吗?阅读需要几个小时!实际上,将文件读入数据帧不会触发实际读取,除非在数据帧上调用了类似show的操作。为什么你要花几个小时?我最初有jsonl.gzip文件,因为.gz是不可拆分的,所以我将其解压缩为.json。看来这里只有一个遗嘱执行人在工作。我正在做spark.read.json(“path”)。然而,像上面这样将“orc”文件读入数据帧根本不需要时间!我在dataproc上的CPU使用率太低~25%。
df.createOrReplaceTempView("my_table")

sqlDF = spark.sql("SELECT * FROM my_table limit 10")
sqlDF.show()