我在HDFS上有许多镶木地板文件目录,每个目录包含几千个小的(大多数<100kb)镶木地板文件。他们减慢了我的Spark工作,所以我想把它们结合起来。
使用以下代码,我可以将本地镶木地板文件重新分区为较少的部分:
val pqFile = sqlContext.read.parquet("file:/home/hadoop/data/file.parquet")
pqFile.coalesce(4).write.save("file:/home/hadoop/data/fileSmaller.parquet")
但我不知道如何通过编程方式通过Scala代码获取HDFS上目录的大小,因此我无法计算出传递给coalesce
函数的分区数量真实的数据集。
我该怎么做?或者在Spark中有一种方便的方法,以便我可以配置编写器来编写固定大小的镶木地板分区吗?
答案 0 :(得分:4)
你可以尝试
class Program
{
static List<Card> userHand;
static List<Card> dealerHand;
static BlackJackDeck blackJackDeck;
static void Main(string[] args)
{
blackJackDeck = new BlackJackDeck();
blackJackDeck.shuffleCards();
DealHand();
}
static void DealHand() {
userHand = new List<Card>();
userHand[0] = (blackJackDeck.addCard());
userHand[1] = (blackJackDeck.addCard());
Console.WriteLine("Card1: {0} of {1}", userHand[0].Face, userHand[0].Suit);
Console.WriteLine("Card2: {0} of {1}", userHand[1].Face, userHand[1].Suit);
Console.ReadLine();
}
}
根据文档返回“组成此DataFrame的文件的尽力而为快照”。
作为替代方案,直接在HDFS级别上:
pqFile.inputFiles.size
这样你也可以获得文件大小。