我们可以在从hdfs读取csv文件时对其进行分区吗?

h5qlskok  于 2021-05-27  发布在  Spark
关注(0)|答案(1)|浏览(475)

我试图读取一个巨大的csv文件到Spark和加载到雪花表。要读取csv文件,pyspark中有以下语法:

file_df = spark.read.format('csv').option('header', 'true').option('inferSchema', 'true').load('/tmp/dirpath/data/')

我的csv文件的架构:

schema = StructType([
        StructField("CUSTKEY", IntegerType(), True),
        StructField("NAME", StringType(), True),
        StructField("ADDRESS", StringType(), True),
        StructField("NATIONID", IntegerType(), True),
        StructField("PHONE", StringType(), True),
        StructField("ACCTBAL", DoubleType(), True),
        StructField("COMMENT", StringType(), True),
    ])

要从rdbms表中读取数据,我们有以下语法:

yearDF = spark.read.format("jdbc").option("url", connectionUrl)
                       .option("dbtable", s"(${execQuery}) as year2016")
                       .option("user", devUserName)
                       .option("password", devPassword)
                       .option("partitionColumn","epochVals")
                       .option("lowerBound", minEp)
                       .option("upperBound", maxEp)
                       .option("numPartitions",15)
                       .load()

要在从表中读取数据时对数据进行分区,我们可以选择 partitionColumn 我们可以在其中指定分区列(这是一个旧场景&my data属于hive表的单个分区),其中 epochVals 具有几乎唯一的值和参数 numPartitions 有助于将数据划分为精确数量的分区(15是用来解释场景的随机数),因此在读取数据时,spark有15个分区来排列数据。
现在我的csv文件的大小是35gb。我们可以一直 repartition 一个Dataframe按照代码中的要求,但在spark中是否有一个选项在读取csv文件时对数据进行分区?如果我已经知道csv文件和列的模式 custkey 包含唯一值的,我可以使用 partitionColumn 以及 numpartitions spark.read.format('csv')语句中的参数?如果不是的话,我怎样才能决定分区的最佳数目呢 repartition 加载csv文件后的数据?有没有人能告诉我是否可以按我上面的要求做?

zpgglvta

zpgglvta1#

回答问题的标题:如果使用spark.read,则没有。你需要 repartition 然后是Dataframe。

相关问题