相关疑难解决方法(0)

如何从按月分区的 parquet 文件中删除特定月份

我有monthly过去 5 年的收入数据,并且我parquetappend模式但列的格式存储各个月份的数据帧。这是下面的伪代码 -partitioned by month

def Revenue(filename):
    df = spark.read.load(filename)
    .
    .
    df.write.format('parquet').mode('append').partitionBy('month').save('/path/Revenue')

Revenue('Revenue_201501.csv')
Revenue('Revenue_201502.csv')
Revenue('Revenue_201503.csv')
Revenue('Revenue_201504.csv')
Revenue('Revenue_201505.csv')
Run Code Online (Sandbox Code Playgroud)

df每月以格式存储,parquet如下所示 -

在此输入图像描述

问:如何删除parquet特定月份对应的文件夹?

一种方法是将所有这些parquet文件加载​​到一个大文件中df,然后使用.where()子句过滤掉该特定月份,然后将其保存回模式月份parquet格式,如下所示 -partitionByoverwrite

# If we want to remove data from Feb, 2015
df = spark.read.format('parquet').load('Revenue.parquet')
df = df.where(col('month') != lit('2015-02-01'))
df.write.format('parquet').mode('overwrite').partitionBy('month').save('/path/Revenue')
Run Code Online (Sandbox Code Playgroud)

但是,这种方法相当麻烦。

另一种方法是直接删除该特定月份的文件夹,但我不确定这是否是处理问题的正确方法,以免我们metadata以不可预见的方式更改。

parquet删除特定月份的数据的正确方法是什么?

python apache-spark parquet pyspark

6
推荐指数
1
解决办法
2万
查看次数

如何从 HDFS 中的数据创建 EXTERNAL Spark 表

我已将 HDFS 中的镶木地板表加载到 DataFrame 中:

val df = spark.read.parquet("hdfs://user/zeppelin/my_table")

我现在想要将此表公开给 Spark SQL,但这必须是一个永久表,因为我想从 JDBC 连接或其他 Spark 会话访问它。

快速的方法可能是调用df.write.saveAsTable方法,但在这种情况下,它将具体化 DataFrame 的内容并创建指向 Hive 元存储中的数据的指针,从而在 HDFS 中创建数据的另一个副本。

我不想拥有相同数据的两个副本,因此我希望创建一个外部表来指向现有数据。

hive apache-spark

5
推荐指数
1
解决办法
2万
查看次数

标签 统计

apache-spark ×2

hive ×1

parquet ×1

pyspark ×1

python ×1