迭代pySpark中目录中的文件,以自动化数据帧和SQL表创建

时间:2017-09-01 19:48:30

标签: apache-spark automation pyspark

所以,基础是:

  • 我在Spark 2。+
  • 我在Jupyter笔记本中运行这一切
  • 我的目标是遍历目录中的多个文件,并使用spark(1)创建数据帧,以及(2)将这些数据帧转换为sparkSQL表。基本上,我希望能够随时打开笔记本,并且总是能够随时随地加载所有可用的笔记本。

以下是我的导入:

from pyspark.sql.functions import *
from pyspark.sql import SQLContext
sqlContext = SQLContext(sc)

fileDirectory = 'data/'

以下是实际代码:

for fname in os.listdir(fileDirectory):
    sqlContext.read.format("csv").\
            option("header", "true").\
            option("inferSchema", "true").\
            load(fname)

    df_app = app_dat_df
    df_app.createOrReplaceTempView(fname)

但是我收到以下错误消息:

AnalysisException: u'Unable to infer schema for CSV. It must be specified manually.;'

它似乎没有找到我传递文件的方式的问题(很棒),但它不会让我推断模式。当我手动浏览每个文件时,这从来就不是问题。

有人可以给我一些关于我可以改进它们/让它运行的指示吗?

很多,非常感谢!

1 个答案:

答案 0 :(得分:0)

由于inferSchema抛出错误,您应手动指定csv数据的架构。

同样@Marie提到你需要稍微修改你的加载语法。

from pyspark.sql.types import *

customSchema = StructType([
    StructField("string_col", StringType(), True),
    StructField("integer_col", IntegerType(), True),
    StructField("double_col", DoubleType(), True)])

fileDirectory = 'data/'
for fname in os.listdir(fileDirectory):
    df_app = sqlContext.read.format("csv").\
        option("header", "true"). \
        schema(customSchema). \
        load(fileDirectory + fname)

希望这有帮助!


如果它解决了您的问题,请不要告诉我们。)