如何创建动态数据框

Posted

技术标签:

【中文标题】如何创建动态数据框【英文标题】:How to create a dynamic dataframe 【发布时间】:2020-02-08 15:36:06 【问题描述】:

我试图创建一个数据框,我以以下方式创建数据框的原因是为了使其动态,但表达式作为字符串传递并且 exec 命令无法创建数据框架并分配给一个变量。

这是我的代码:

def fileReader(inputFileType,sourceFilePath,inputFileType):
 value ='true'
 header='header'


 a= "spark.read.option('"+header+"','"+value+"')."+inputFileType+"('"+sourceFilePath+"')"
 print(a)
 print(type(a))
 ds = exec(a)
 return 'True'

【问题讨论】:

请澄清问题,并分享minimal reproducible example。此外,变量和函数名称应遵循lower_case_with_underscores 样式。 【参考方案1】:

你可以试试下面的配置文件

import json
files = json.loads('
  "fileA": 
    "header": "true",
    "inputFileType": "csv",
    "sourceFilePath": "path_to_fileA"
  ,
  "fileB": 
    "header": "true",
    "inputFileType": "parquet",
    "sourceFilePath": "path_to_fileB"
  
')


df_dict = 
for file in files:
    df_dict['file'] = spark.read.option('header',file["header"]).format(file["inputFileType"]).path(file["sourceFilePath"])

然后你会得到一个包含不同格式和文件路径的数据帧字典。

【讨论】:

【参考方案2】:

嘿,你知道答案了……

def fileReader(inputFileType,sourceFilePath,inputFileType):
  value ='true'
  header='header'
  a= "spark.read.option('"+header+"','"+value+"')."+inputFileType+" 
  ('"+sourceFilePath+"')"
  print(a)
  print(type(a))
  ds = eval(a)
  return 'True'

创建此函数的动机是使用 pyspark 支持的不同文件格式动态创建数据帧。 现在使用这个函数,我可以创建一个 pyspark 支持的任何类型的文件格式的数据框,只需传递文件的位置和格式。

感谢所有帮助。

【讨论】:

【参考方案3】:

我建议在代表 spark 命令的字符串上使用 pyspark 而不是 exec。 pyspark 有一个非常好的接口,用于在 python 中执行 spark 命令。它还有一个方便的函数csvpyspark.sql 模块上loads data from a csv file into a spark dataframe。您的代码将如下所示:

from pyspark.sql import SparkSession
spark =(SparkSession.builder
                    .appName(YOUR_APP_NAME)
                    .getOrCreate())
csv_df = spark.csv('path/to/csv')

但是,如果您的数据存储在 csv 中,我怀疑没有足够的数据来真正保证使用 spark,这会产生很多开销并且用于处理非常大的数据集。我建议先试用 pandas,which also has a handy way of loading csv data into a dataframe,并且只有在你的代码在 pandas 上运行太慢时才切换到 spark。

【讨论】:

嗨,查理,它不仅适用于 csv,也适用于其他格式,如镶木地板等。 我使用exec的原因是我想动态传递文件格式,而不是只对一种格式保持静态。

以上是关于如何创建动态数据框的主要内容,如果未能解决你的问题,请参考以下文章

如何基于查找数据框创建数据框并在特定列中的动态和映射值上创建多列

如何根据从其他框中选择的文本更改动态创建的组合框的显示项

使用 Pandas 动态创建数据框

需要帮助来创建动态数据框

如何动态读取 QLineEdit 数据

使用数组中的数据动态创建选择框