通过先阅读实木复合地板文件将新列添加到数据框

问题描述 投票:0回答:1

假设有一个具有多列的数据框,看起来像这样(我省略了不必要的列):

+----------------------------------------+
|path                                    |
+----------------------------------------+
|/tmp/some_folder/2020-04-02/blabla1.parq|
|/tmp/some_folder/2020-05-14/bla2bla.parq|
+----------------------------------------+

路径是hdfs中的某个拼花文件,其中只有一行并且具有这样的结构:

+-----------+
|value      |
+-----------+
|some value |
+-----------+

如何读取这些文件,并在初始数据框中添加一列(“值”)?结果,我想要一个这样的结构:

+----------------------------------------+----------+
|path                                    |value     |
+----------------------------------------+----------+
|/tmp/some_folder/2020-04-02/blabla1.parq|some value|
|/tmp/some_folder/2020-05-14/bla2bla.parq|bla blah  |
+----------------------------------------+----------+

例如,我可以将'path'列变成一个列表,通过迭代将其读入datframes并与初始数据帧结合。还有其他解决方案吗?最好在性能上更快。

python apache-spark pyspark apache-spark-sql
1个回答
0
投票

您可以通过使用input_file_name()避免加入,以便将path添加到数据框中。

Example:

from pyspark.sql.functions import *
from pyspark.sql.types import *

paths=df.select("path").rdd.map(lambda x:x[0]).collect()

#schema will the fields
sch=StructType([StructField("path",StringType()),StructField("value",StringType())])
final_df=spark.createDataFrame([],schema)

for path in paths:
    final_df=spark.read.parquet(path).withColumn("path",input_file_name())

#dataframe will have path and value to it
final_df.show()
© www.soinside.com 2019 - 2024. All rights reserved.