我正在Livy Server中使用对localhost:8998/sessions/0/statements的HTTP POST调用执行以下语句

{
  "code": "spark.sql(\"select * from test_table limit 10\")"
}

我想要以下格式的答案
(...)
"data": {
  "application/json": "[
    {"id": "123", "init_date": 1481649345, ...},
    {"id": "133", "init_date": 1481649333, ...},
    {"id": "155", "init_date": 1481642153, ...},
  ]"
}
(...)

但是我得到的是
(...)
"data": {
  "text/plain": "res0: org.apache.spark.sql.DataFrame = [id: string, init_date: timestamp ... 64 more fields]"
}
(...)

这是数据框的toString()版本。

有什么方法可以使用Livy Server将数据框作为JSON返回?

编辑

找到了解决该问题的JIRA问题:https://issues.cloudera.org/browse/LIVY-72

通过评论可以说Livy不支持并且不支持这种功能吗?

最佳答案

我没有使用Livy的丰富经验,但据我所知,此端点用作交互式 shell ,并且输出将是一个字符串,其实际结果将由 shell 显示。因此,考虑到这一点,我可以想到一种模拟所需结果的方法,但这可能不是最佳方法:

{
  "code": "println(spark.sql(\"select * from test_table limit 10\").toJSON.collect.mkString(\"[\", \",\", \"]\"))"
}

然后,您将在字符串中包装一个JSON,以便您的客户端可以对其进行解析。

10-08 02:08