Dataframe 有没有一种方法可以使用DataRicks将多个文本文件加载到单个数据帧中?

Dataframe 有没有一种方法可以使用DataRicks将多个文本文件加载到单个数据帧中?,dataframe,pyspark,apache-spark-sql,pyspark-sql,azure-databricks,Dataframe,Pyspark,Apache Spark Sql,Pyspark Sql,Azure Databricks,我正在尝试测试一些递归循环遍历文件夹和子文件夹中的所有文件,并将所有内容加载到单个数据帧中的想法。我有12种不同类型的文件,它们的区别基于文件命名约定。所以,我有以“ABC”开头的文件名,以“CN”开头的文件名,以“CZ”开头的文件名,等等。我尝试了以下三个想法 import pyspark import os.path from pyspark.sql import SQLContext from pyspark.sql.functions import input_file_name

我正在尝试测试一些递归循环遍历文件夹和子文件夹中的所有文件,并将所有内容加载到单个数据帧中的想法。我有12种不同类型的文件,它们的区别基于文件命名约定。所以,我有以“ABC”开头的文件名,以“CN”开头的文件名,以“CZ”开头的文件名,等等。我尝试了以下三个想法

import pyspark  
import os.path
from pyspark.sql import SQLContext
from pyspark.sql.functions import input_file_name

df = sqlContext.read.format("com.databricks.spark.text").option("header", "false").load("dbfs/mnt/rawdata/2019/06/28/Parent/ABC*.gz")
df.withColumn('input', input_file_name())
print(dfCW)

这可以通过PySpark或PySpark SQL完成。我只需要将所有内容从数据湖加载到数据帧中,这样我就可以将数据帧推送到Azure SQL Server中。我在Azure Databricks中编写所有代码。如果这是普通的Python,我可以很容易地完成它。我只是不太了解PySpark,无法让它正常工作

val myDFCsv = spark.read.format("csv")
   .option("sep","|")
   .option("inferSchema","true")
   .option("header","false")
   .load("mnt/rawdata/2019/01/01/client/ABC*.gz")

myDFCsv.show()
myDFCsv.count()
为了说明这一点,我有3个压缩文件,看起来像这样(ABC0006.gz、ABC00015.gz和ABC0022.gz):

我想将所有内容合并到一个datdframe中,如下所示(文件名为.gz;每个文件的标题完全相同):

我有1000份这些文件要处理。幸运的是,只有12种不同类型的文件,因此有12种类型的名称…以“ABC”、“CN”、“CZ”等开头。感谢您在这里查看

根据你的评论,亚伯拉罕,我的代码应该是这样的,对吧

file_list=[]
path = 'dbfs/rawdata/2019/06/28/Parent/'
files  = dbutils.fs.ls(path)
for file in files:
    if(file.name.startswith('ABC')):
       file_list.append(file.name)
df = spark.read.load(path=file_list)

这是正确的,还是不正确的?请告知。我想我们已经很接近了,但这对我来说仍然不起作用,否则我就不会在这里重新发布了。谢谢

PySpark支持使用load函数加载文件列表。我相信这就是你要找的

file_list=[]
path = 'dbfs/mnt/rawdata/2019/06/28/Parent/'
files  = dbutils.fs.ls(path)
for file in files:
    if(file.name.startswith('ABC')):
       file_list.append(file.name)
df = spark.read.load(path=file_list)
如果文件为CSV且具有标题,请使用以下命令

df = spark.read.load(path=file_list,format="csv", sep=",", inferSchema="true", header="true")

有关更多示例代码,请参阅PySpark支持使用加载功能加载文件列表。我相信这就是你要找的

file_list=[]
path = 'dbfs/mnt/rawdata/2019/06/28/Parent/'
files  = dbutils.fs.ls(path)
for file in files:
    if(file.name.startswith('ABC')):
       file_list.append(file.name)
df = spark.read.load(path=file_list)
如果文件为CSV且具有标题,请使用以下命令

df = spark.read.load(path=file_list,format="csv", sep=",", inferSchema="true", header="true")

有关更多示例代码,请参阅

我终于,终于,终于,终于实现了这一点

val myDFCsv = spark.read.format("csv")
   .option("sep","|")
   .option("inferSchema","true")
   .option("header","false")
   .load("mnt/rawdata/2019/01/01/client/ABC*.gz")

myDFCsv.show()
myDFCsv.count()

显然,所有压缩文件和推断模式任务都是自动处理的。因此,代码是超级、超轻量的,而且速度也非常快。

我终于,终于,终于让它工作了

val myDFCsv = spark.read.format("csv")
   .option("sep","|")
   .option("inferSchema","true")
   .option("header","false")
   .load("mnt/rawdata/2019/01/01/client/ABC*.gz")

myDFCsv.show()
myDFCsv.count()

显然,所有压缩文件和推断模式任务都是自动处理的。因此,代码超级、超轻量,而且速度也非常快。

谢谢!这看起来很有希望!!我将路径更改为实际路径,运行了代码,现在我收到了以下错误消息:NameError:name'dbfsutils'未定义。我导入了DBUtils库,它似乎导入得很好。这项工作还需要其他依赖项吗?@asher感谢您的指点。那是个打字错误。没有其他依赖关系dbutils和spark会话是执行代码所需的全部;我在PySpark的数据库里运行这个。我取出了“import DBUtils”一行,并从集群中删除了该库。我刚刚重新运行了代码,得到了相同的结果:NameError:name'dbfsutils'未定义错误发生在这一行:files=dbfsutils.fs.ls(path)@asher只需将dbfsutils更改为dbutils。我在Databricks中试过,结果令人满意Hanks Abraham!这看起来很有希望!!我将路径更改为实际路径,运行了代码,现在我收到了以下错误消息:NameError:name'dbfsutils'未定义。我导入了DBUtils库,它似乎导入得很好。这项工作还需要其他依赖项吗?@asher感谢您的指点。那是个打字错误。没有其他依赖关系dbutils和spark会话是执行代码所需的全部;我在PySpark的数据库里运行这个。我取出了“import DBUtils”一行,并从集群中删除了该库。我刚刚重新运行了代码,得到了相同的结果:NameError:name'dbfsutils'未定义错误发生在这一行:files=dbfsutils.fs.ls(path)@asher只需将dbfsutils更改为dbutils。我在Databricks中尝试了它,它给出了期望的结果