如何选择包含任何给定字符串的列作为pyspark中列名的一部分

toe95027  于 2021-07-12  发布在  Spark
关注(0)|答案(0)|浏览(281)

我有一个Parquet文件包含多个列。我只想根据列名的一个条件从中选择几个列:如果列名包含一个子字符串,它是我预定义的字符串列表的一部分,我应该选择它。请注意,这与:从spark中的parquet文件中读取特定列的有效方法不同。我需要选择甚至部分匹配任何字符串的列
例如:如果我预定义的字符串列表

string_list= ['area','rank']

&我的Dataframe是:

+----------+----------+------------+--------+----------+------+
| areaname | pagerank | customerid | amount | areacode | page |
+----------+----------+------------+--------+----------+------+
| london   |      345 | 22wer      |    455 |      100 |   45 |
| germany  |    47128 | f234       |    600 |      200 |   33 |
| lebanon  |      344 | 45rtf      |    700 |      230 |   43 |
+----------+----------+------------+--------+----------+------+

我的预期产出是:

+----------+----------+----------+
| areaname | pagerank | areacode |
+----------+----------+----------+
| london   |      345 |      100 |
| germany  |    47128 |      200 |
| lebanon  |      344 |      230 |
+----------+----------+----------+

我已经尝试先读取文件,然后选择列,如下所示。但我不想一次将整个文件读入内存。我想在阅读时执行select操作

parquet_file = spark.read.format("parquet").load(parquet_path)
required_columns= ['`'+column+'`' for column in parquet_file.columns if any(item in column for item in string_list)]
parquet_file = parquet_file.select(required_columns)

我想知道什么是最有效的记忆方式来做到这一点。我能用Parquet地板吗?

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题