尝试将多个CSV文件中的数据加载到一个DF

时间:2019-11-19 21:53:07

标签: python python-3.x scala dataframe databricks

我正在使用Databricks,因此可以使用Python和Scala。我正在尝试从一个湖中的多个具有相同架构的文件中加载数据。现在,这非常奇怪,因为仅在1个月前,该代码就可以正常工作了,现在,它给了我错误消息,表明它无法在湖中找到文件。我认为,这只是一个猜测,安全设置已更改,也许现在它需要登录凭据,否则脚本无法识别湖中的文件。这是我的示例代码。

import org.apache.spark.sql.SQLContext
import org.apache.spark.sql.types.{StructType, StructField, StringType, IntegerType};
import org.apache.spark.sql.functions.input_file_name

val customSchema = StructType(Array(
StructField("cust_id", StringType, true),
StructField("asset_id", StringType, true),
StructField("account1", StringType, true),
StructField("account2", StringType, true),
etc., etc. there are a lot of fields...
StructField("filename", StringType, true)))

val df = sqlContext.read
    .format("com.databricks.spark.csv")
    .option("header", "false")
    .option("sep", "|")
    .schema(customSchema)
    .load("mnt/rawdata/2019/??/??/AWS*.gz")
    .withColumn("filename", input_file_name())
df.count()

import com.microsoft.azure.sqldb.spark.bulkcopy.BulkCopyMetadata
import com.microsoft.azure.sqldb.spark.config.Config
import com.microsoft.azure.sqldb.spark.connect._

val bulkCopyConfig = Config(Map(
  "url"               -> "acssqlserver.database.windows.net",
  "databaseName"      -> "my_db_name",
  "user"              -> "my_user_name",
  "password"          -> "my_password",
  "dbTable"           -> "dbo.MyTable",
  "bulkCopyBatchSize" -> "500000",
  "bulkCopyTableLock" -> "true",
  "bulkCopyTimeout"   -> "600"
))

df.write.mode(SaveMode.Append).sqlDB(bulkCopyConfig)

在Python中,我认为将许多内容合并到一个练习中看起来像这样(当然,这是变体)。

import pandas as pd
import glob

path = r'mnt/rawdata/2019/??/??/AWS*.gz' # use your path
all_files = glob.glob(path + '/*.gz')

li = []

for filename in all_files:
    df = pd.read_csv(filename, index_col=None, header=0)
    li.append(df)

frame = pd.concat(li, axis=0, ignore_index=True)

我正在使用Python使用下面的代码列出容器中的所有blob。

from azure.storage.blob import BlockBlobService
block_blob_service = BlockBlobService(account_name='accountname', account_key='accountkey')
generator = block_blob_service.list_blobs('rawdata')
for blob in generator:
    print("\t Blob name: " + blob.name)

使用帐户名和帐户密钥可以很好地工作,但是如果没有这些,则无法使用。 Al以为,就在1个月前,它完全没有任何凭证就可以正常工作,所以我猜测有些变化,但是我不确定那是什么。

我再次尝试将与某个模式匹配的所有文件合并到DF中,然后将其推入SQL Server数据存储中。如果有人可以帮忙,我将不胜感激。我将继续自行寻找可行的解决方案。

0 个答案:

没有答案