org.apache.spark.sql.Row到Int

时间:2014-07-02 18:14:19

标签: scala apache-spark

我试图从spark-sql的SQL语句中获取一个Integer。

var num_en = ctx.sql("SELECT count(*) FROM table WHERE lang = 'en'")
num = num_en.collect()(0)

num_en是一个SchemaRDD,而num,根据我得到的错误," Row"。

<console>:144: error: type mismatch;
 found   : org.apache.spark.sql.Row
    (which expands to)  org.apache.spark.sql.catalyst.expressions.Row

问题是我无法找到org.apache.spark.sql.Row或org.apache.spark.sql.catalyst.expressions.Row的任何有用文档。

如何提取SQL语句返回的一个整数值以供以后使用?

2 个答案:

答案 0 :(得分:4)

最好的文件是来源

Row.scala

  /**
   * Returns the value of column `i` as an int.  This function will throw an exception if the value
   * is at `i` is not an integer, or if it is null.
   */
  def getInt(i: Int): Int =
    row.getInt(i)

应用于您的示例:

num = num_en.collect()(0).getInt(0)

答案 1 :(得分:0)

这个原因是num_enSchemaRDD。当你对collect()进行Array[org.apache.spark.sql.Row]时,你会得到num_en.collect()(0),所以{{1}}会为你提供阵列的第一行。