0

当我Error in curl::curl_fetch_memory(url, handle = handle) : Empty reply from server尝试对 Spark 数据帧进行数据操作时,我在 Rstudio(Watson 工作室)进行了一些操作。

背景:

数据存储在 IBM Cloud Object Storage (COS) 上。这将是几个 10GB 的文件,但目前我只在第一个子集 (10GB) 上进行测试。

我想的工作流程是,在 Rstudio(Watson Studio)中,使用 sparklyr 连接到 spark(免费计划),通过 将文件作为 Spark 数据帧读取sparklyr::spark_read_csv(),然后对其应用特征转换(例如,将一列分成两列,计算差异在两列之间,删除不需要的列,过滤掉不需要的行等)。预处理完成后,将清理后的数据通过sparklyr::spark_write_csv().

为了使用Spark,我在项目中添加了2个spark服务(似乎该帐户下的任何spark服务都可以被Rstudio使用.. Rstudio不受项目限制?);我可能需要使用 R 笔记本进行数据探索(以一种很好的方式显示图表),所以我为此创建了这个项目。在之前的测试中我发现对于 R notebooks / Rstudio,两个 env 不能同时使用同一个 Spark 服务;所以我创建了 2 个 spark 服务,第一个用于 R 笔记本(我们称之为 spark-1),第二个用于 Rstudio(称之为 spark-2)。

由于我个人更喜欢 sparklyr(仅预装在 Rstudio 中)而不是 SparkR(预装在 R 笔记本中),几乎整整一周我都在使用 spark-2 在 Rstudio 中开发和测试代码。

我对 Spark 不是很熟悉,目前它的行为方式我不太了解。如果有人可以就任何问题提出建议,那将非常有帮助:

1)加载数据失败(偶尔)

直到昨天,它一直很稳定,因为当我开始遇到使用完全相同的代码加载数据的问题时。该错误没有说明任何内容,但 R 无法获取数据 ( Error in curl::curl_fetch_memory(url, handle = handle) : Empty reply from server)。我多次观察到,出现这个错误后,如果我再次运行代码导入数据(只需一行代码),数据就会成功加载。

Q1截图

2)未能应用(可能)大量的转换(总是,不管数据大小)

为了检查数据转换是否正确,我在转换的每一步(大多数不是序数,即步骤的顺序无关紧要)之后打印出前几行感兴趣的变量。我读了一些关于 sparklyr 如何翻译操作的内容。基本上,在您调用预览或转换后打印一些数据之前,sparklyr 并不会真正将转换应用于数据。经过一组转换,如果我再运行一些,当我打印出前几行时,我得到了错误(与第一季度相同的无用错误)。我确信代码是正确的,因为一旦我在加载数据后立即运行这些额外的代码步骤,我就能够打印和预览前几行。

3) 未能收集数据(总是针对第一个子集)

通过收集数据,我想将数据帧拉到本地机器,这里是 Watson Studio 中的 Rstudio。应用相同的转换集后,我能够收集样本数据的清理版本(最初为 1000 行 x 158 列,预处理后约 1000 行 x 90 列),但在前 10 GB 子集文件(最初25,000,000 行 x 158 列,预处理后最多 50,000 行 x 90 列)。我认为它占用的空间不应超过 200MB,这意味着它应该能够被读入 Spark RAM (1210MB) 或 Rstudio RAM。但它只是失败了(再次出现那个无用的错误)。

4)无法保存数据(总是,无论数据大小)

每次我尝试将数据写回COS时都会发生同样的错误。我想这与转换有关,可能是Spark收到太多转换请求时发生的事情?

5) 初始化 Spark 失败(发现某种模式)

从今天下午开始,无法初始化spark-2,已经使用了大约一个星期。我得到了同样无用的错误信息。但是我可以连接到 spark-1。

我检查了 IBM Cloud 上的 spark 实例信息:

火花-2

火花-1

奇怪的是 spark-2 有 67 个活动任务,因为我之前的操作收到错误消息。另外,我不确定为什么两个 spark 实例中的“输入”都这么大。

有谁知道发生了什么以及为什么会发生?谢谢!

4

0 回答 0