ファイルサイズは約10 GBです。データを抽出して複数のハイブ テーブルに挿入する必要があります。
単一のノードでいくつかの事前解析/マップ機能を使用して達成できます。
サンプルデータ :
Dept : HR
Emp name is Andrew lives in Colorodo
DOB : 03/09/1958
Project name : Healthcare
DOJ : 06/04/2011
DOL : 09/21/2011
Project name : Retail
DOJ : 11/04/2011
DOL : 08/21/2013
Project name : Audit
DOJ : 09/11/2013
DOL : 09/01/2014
Project name : ContorlManagement
DOJ : 01/08/2015
DOL : 02/14/2016
Emp name is Alex lives in Texas
DOB : 03/09/1958
Project name : Healthcare
DOJ : 06/04/2011
DOL : 09/21/2011
Project name : ContorlManagement
DOJ : 01/08/2015
DOL : 02/14/2016
Emp name is Mathew lives in California
DOB : 03/09/1958
Project name : Healthcare
DOJ : 06/04/2011
DOL : 09/21/2011
Project name : Retail
DOJ : 11/04/2011
DOL : 08/21/2013
Project name : Audit
DOJ : 09/11/2013
DOL : 09/01/2014
Project name : ContorlManagement
DOJ : 01/08/2015
DOL : 02/14/2016
Dept : QC
Emp name is Nguyen lives in Nevada
DOB : 03/09/1958
Project name : Healthcare
DOJ : 06/04/2011
DOL : 09/21/2011
Project name : Retail
DOJ : 11/04/2011
DOL : 08/21/2013
Project name : Audit
DOJ : 09/11/2013
DOL : 09/01/2014
Project name : ContorlManagement
DOJ : 01/08/2015
DOL : 02/14/2016
Emp name is Cassey lives in Newyork
DOB : 03/09/1958
Project name : Healthcare
DOJ : 06/04/2011
DOL : 09/21/2011
Project name : ContorlManagement
DOJ : 01/08/2015
DOL : 02/14/2016
Emp name is Ronney lives in Alasca
DOB : 03/09/1958
Project name : Audit
DOJ : 09/11/2013
DOL : 09/01/2014
Project name : ContorlManagement
DOJ : 01/08/2015
DOL : 02/14/2016
これが私のコードです:
val inp = sc.textFile("F:\\Softwares\\Spark\\Programs for td\\input\\sample.txt").collect().mkString(" ").replaceAll("""[\r\n]+""", " ")
val pt1 = """(?s)Dept : .*?(?=\bDept : |$)""".r
val pt2 = """(?s)Emp name : .*?(?=\bEmp name : |$)""".r
val dname = """Dept : (\S+).*?""".r
val emprec = """Emp name : (\S+) lives in (\S+) DOB : (\S+).*?""".r
val prrec = """Project name : (\S+) DOJ : (\S+) DOL : (\S+) """.r
var recs = pt1.findAllIn(inp)
var rec1 = recs
この rec1( Regex.MatchIterator) の後、データは次のようになります。
Dept : HR Emp name : Andrew lives in Colorodo DOB : 03/09/1958 Project name :Healthcare DOJ : 06/04/2011 DOL : 09/21/2011 Project name : Retail DOJ : 11/04/2011 DOL : 08/21/2013 Project name : Audit DOJ : 09/11/2013 DOL : 09/01/2014 Project name : ContorlManagement DOJ : 01/08/2015 DOL : 02/14/2016 Emp name : Alex lives in Texas DOB : 03/09/1958 Project name : Healthcare DOJ : 06/04/2011 DOL : 09/21/2011 Project name : ContorlManagement DOJ : 01/08/2015 DOL : 02/14/2016 Emp name : Mathew lives in California DOB : 03/09/1958 Project name : Healthcare DOJ : 06/04/2011 DOL : 09/21/2011 Project name : Retail DOJ : 11/04/2011 DOL : 08/21/2013 Project name : Audit DOJ : 09/11/2013 DOL : 09/01/2014 Project name : ContorlManagement DOJ : 01/08/2015 DOL : 02/14/2016
Dept : QC Emp name : Nguyen lives in Nevada DOB : 03/09/1958 Project name : Healthcare DOJ : 06/04/2011 DOL : 09/21/2011 Project name : Retail DOJ : 11/04/2011 DOL : 08/21/2013 Project name : Audit DOJ : 09/11/2013 DOL : 09/01/2014 Project name : ContorlManagement DOJ : 01/08/2015 DOL : 02/14/2016 Emp name : Cassey lives in Newyork DOB : 03/09/1958 Project name : Healthcare DOJ : 06/04/2011 DOL : 09/21/2011 Project name : ContorlManagement DOJ : 01/08/2015 DOL : 02/14/2016 Emp name : Ronney lives in Alasca DOB : 03/09/1958 Project name : Audit DOJ : 09/11/2013 DOL : 09/01/2014 Project name : ContorlManagement DOJ : 01/08/2015 DOL : 02/14/2016
つまり、各部門のデータは独自の行になります。場合によっては、300k ~ 400k 行の間で変動することがあります。これをフォーマットしてデータフレームに変換するコードの次の部分を次に示します (この Df をハイブに挿入するコードはまだ作成していません。しかし、この pgm の最後にこれを記述できると思います。)
var recfinal = recs.map
{
e=>
// println(e)
var dname(d) = e
// println(d)
var rec2= pt2.findAllIn(e)
var rec5 =rec2.map { k =>
// println(k)
var emprec(ename,est,edob) = k
// println(ename,est,edob)
var rec3 = prrec.findAllIn(k)
var rec4 = rec3.map { j =>
var prrec(prjname,doj,dol) = j
var reclist = (d,ename,est,edob,prjname,doj,dol)
reclist
}
.toList
rec4
}
.toList
rec5
}
.flatMap(identity)
.flatMap(identity)
val rec9= recfinal.toSeq.toDF("dname","en","st","db","prj","dj","dl")
rec9.show
1) コードの 2 番目の部分を複数のエグゼキュータ ノードに分散するにはどうすればよいですか? 同時にデータも均等に分割して実行する必要があります。4 つのノード クラスターがあるように、各ノードは 100K 行を取得し、2 番目のコードを単独で実行する必要があります。しかし、最終的にはすべてが 1 つのハイブ テーブルにあるはずです。