我试图读取一个巨大的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文件后的数据?有没有人能告诉我是否可以按我上面的要求做?
1条答案
按热度按时间zpgglvta1#
回答问题的标题:如果使用spark.read,则没有。你需要
repartition
然后是Dataframe。