aboutsummaryrefslogtreecommitdiffstats
path: root/scalding
diff options
context:
space:
mode:
Diffstat (limited to 'scalding')
-rw-r--r--scalding/src/main/scala/sandcrawler/HBaseBuilder.scala31
-rw-r--r--scalding/src/main/scala/sandcrawler/HBaseCountJob.scala2
-rw-r--r--scalding/src/test/scala/sandcrawler/HBaseBuilderTest.scala12
3 files changed, 25 insertions, 20 deletions
diff --git a/scalding/src/main/scala/sandcrawler/HBaseBuilder.scala b/scalding/src/main/scala/sandcrawler/HBaseBuilder.scala
index 87cc0cb..85766d6 100644
--- a/scalding/src/main/scala/sandcrawler/HBaseBuilder.scala
+++ b/scalding/src/main/scala/sandcrawler/HBaseBuilder.scala
@@ -13,20 +13,25 @@ object HBaseBuilder {
"match0" -> List("status", "doi", "info"))
val inverseSchema = {for ((k,vs) <- schema; v <-vs) yield (k + ":" + v)}.toList
+ // The argument should be of the form family:column, such as "file:size".
+ @throws(classOf[IllegalArgumentException])
+ def parseColSpec(colSpec: String) {
+ if (!(inverseSchema contains colSpec)) {
+ throw new IllegalArgumentException("No such column: " + colSpec)
+ }
+ val pair = colSpec split(":")
+ if (pair.length != 2) {
+ throw new IllegalArgumentException("Bad column specifier " + colSpec +
+ " (specifiers should be family:name)")
+ }
+ (pair(0), pair(1))
+ }
+
// The argument should be a comma-separated list of family:column, such as "f:c, file:size".
@throws(classOf[IllegalArgumentException])
- def parseColSpec(colSpecs: List[String]) : (List[String], List[Fields]) = {
+ def parseColSpecs(colSpecs: List[String]) : (List[String], List[Fields]) = {
// Verify that all column specifiers are legal.
- for (colSpec <- colSpecs) {
- if (!(inverseSchema contains colSpec)) {
- throw new IllegalArgumentException("No such column: " + colSpec)
- }
- val pair = colSpec split(":")
- if (colSpec.split(":").length != 2) {
- throw new IllegalArgumentException("Bad column specifier " + colSpec +
- " (specifiers should be family:name)")
- }
- }
+ for (colSpec <- colSpecs) parseColSpec(colSpec)
// Produce and return a tuple containing:
// 1. A list of column families.
@@ -39,8 +44,8 @@ object HBaseBuilder {
(families, groupedColNames.map({fields => new Fields(fields : _*)}))
}
- def build(table: String, server: String, colSpec: List[String], sourceMode: SourceMode, keyList: List[String] = List("key")) = {
- val (families, fields) = parseColSpec(colSpec)
+ def build(table: String, server: String, colSpecs: List[String], sourceMode: SourceMode, keyList: List[String] = List("key")) = {
+ val (families, fields) = parseColSpecs(colSpecs)
new HBaseSource(table, server, new Fields("key"), families, fields, sourceMode = sourceMode, keyList = keyList)
}
}
diff --git a/scalding/src/main/scala/sandcrawler/HBaseCountJob.scala b/scalding/src/main/scala/sandcrawler/HBaseCountJob.scala
index 250f175..815478b 100644
--- a/scalding/src/main/scala/sandcrawler/HBaseCountJob.scala
+++ b/scalding/src/main/scala/sandcrawler/HBaseCountJob.scala
@@ -10,7 +10,7 @@ import parallelai.spyglass.hbase.HBaseConstants.SourceMode
class HBaseCountJob(args: Args, colSpec: String) extends JobBase(args) with HBasePipeConversions {
val output = args("output")
- // TODO: Add error checking.
+ HBaseBuilder.parseColSpec(colSpec)
val Col: String = colSpec.split(":")(1)
HBaseCountJob.getHBaseSource(colSpec)
diff --git a/scalding/src/test/scala/sandcrawler/HBaseBuilderTest.scala b/scalding/src/test/scala/sandcrawler/HBaseBuilderTest.scala
index 4697f56..603a4c7 100644
--- a/scalding/src/test/scala/sandcrawler/HBaseBuilderTest.scala
+++ b/scalding/src/test/scala/sandcrawler/HBaseBuilderTest.scala
@@ -4,8 +4,8 @@ import cascading.tuple.Fields
import org.scalatest._
class HBaseBuilderTest extends FlatSpec with Matchers {
- "parseColSpec()" should "work on legal nontrivial input" in {
- val (fams, fields) = HBaseBuilder.parseColSpec(List("file:size", "file:cdx", "match0:status"))
+ "parseColSpecs()" should "work on legal nontrivial input" in {
+ val (fams, fields) = HBaseBuilder.parseColSpecs(List("file:size", "file:cdx", "match0:status"))
fams should have length 2
fields should have length 2
val fileIndex = fams.indexOf("file")
@@ -17,26 +17,26 @@ class HBaseBuilderTest extends FlatSpec with Matchers {
}
it should "work on empty input" in {
- val (fams, fields) = HBaseBuilder.parseColSpec(List())
+ val (fams, fields) = HBaseBuilder.parseColSpecs(List())
fams should have length 0
fields should have length 0
}
it should "throw IllegalArgumentException on malformed input" in {
a [IllegalArgumentException] should be thrownBy {
- HBaseBuilder.parseColSpec(List("file_size"))
+ HBaseBuilder.parseColSpecs(List("file_size"))
}
}
it should "throw IllegalArgumentException on nonexistent family" in {
a [IllegalArgumentException] should be thrownBy {
- HBaseBuilder.parseColSpec(List("foo:bar"))
+ HBaseBuilder.parseColSpecs(List("foo:bar"))
}
}
it should "throw IllegalArgumentException on nonexistent column" in {
a [IllegalArgumentException] should be thrownBy {
- HBaseBuilder.parseColSpec(List("file:bar"))
+ HBaseBuilder.parseColSpecs(List("file:bar"))
}
}
}