来自配置单元查询的持久PySpark数据帧

2024-10-01 13:40:24 发布

您现在位置:Python中文网/ 问答频道 /正文

我从蜂箱表中得到一些数据:

df = sqlContext.sql('select shubiru, date from thebigtable bt where bt.num > 10 ')
df.show() # here the query is processed and the results shown

而且效果很好。现在我想在df上操作,但每次在df上执行操作时,它都会再次针对配置单元运行查询:

^{pr2}$

所以我认为,如果我在df上调用persist,查询将不会再次运行:

df.cache()
df = df.withColumn('fdate', dt_udf(df.date))

但是没有骰子,查询将再次针对Hive运行,并由UDF处理。有没有一种方法可以在内存中缓存查询结果,并在数据帧上运行操作而不必每次都命中配置单元?在


Tags: the数据fromdfsqldatewhereselect
1条回答
网友
1楼 · 发布于 2024-10-01 13:40:24

每当对数据执行操作时,sparksql就会从数据源(在您的情况下是配置单元)提取数据。在本例中,您试图在cache()之后重命名列,这将是无用的。我的建议是

df = df.withColumn('fdate', dt_udf(df.date)).withColumn('date_column_2', dt_udf(df.date)).cache()

此语句之后的所有操作都将对spark中持久化的数据进行操作。但是,缓存大量数据会自动收回旧的RDD分区,并且需要返回配置单元以重新生成丢失的分区。在

相关问题 更多 >