【问题标题】:Databricks PySpark: Make Dataframe from Rows of StringsDatabricks PySpark:从字符串行制作数据框
【发布时间】:2021-03-10 22:46:07
【问题描述】:

在使用 PySpark 的 Azure Databricks 中,我正在从目录中读取文件名。我可以打印我需要的行:

df_ls = dbutils.fs.ls('/mypath/')
for row in df_ls:
  filename = row.name.lower()
  if 'mytext' in filename:
    print(filename)

输出,例如:

mycompany_mytext_2020-12-22_11-34-46.txt
mycompany_mytext_2021-02-01_10-40-57.txt

我想将这些行放入数据框中,但无法使其工作。我的一些失败尝试包括:

df_ls = dbutils.fs.ls('/mypath/')
for row in df_ls:
  filename = row.name.lower()
  if 'mytext' in filename:
    print(filename)
    
#     file_list = row[filename].collect() #tuple indices must be integers or slices, not str
#     file_list = filename # last row
#     file_list = filename.collect() # error
#     file_list = spark.sparkContext.parallelize(list(filename)).collect() # breaks last row into list of each character
    
#     col = 'fname' # this and below generates ParseException
#     df = spark.createDataFrame(data = file_list, schema = col)

问题是,如何将行输出收集到单个数据框列中,每个值一行?

【问题讨论】:

    标签: pyspark


    【解决方案1】:

    您可以将文件名收集到一个列表中,并且 spark 需要一个嵌套列表。

    程序如下:

    df_ls = dbutils.fs.ls('/mypath/')
    
    file_names =[]
    for row in df_ls:  
      if 'mytext' in row.name.lower():
        file_names.append([row.name])
    
    df = spark.createDataFrame(file_names,['filename'])
    
    display(df)
    

    【讨论】:

      猜你喜欢
      • 2014-03-28
      • 1970-01-01
      • 1970-01-01
      • 2019-03-07
      • 2022-06-14
      • 2019-12-28
      • 1970-01-01
      • 1970-01-01
      • 2022-11-13
      相关资源
      最近更新 更多