小编sme*_*eeb的帖子

如何将内存中的JSON字符串读入Spark DataFrame

我正在尝试将内存中的JSON 字符串快速读入Spark DataFrame中:

var someJSON : String = getJSONSomehow()
val someDF : DataFrame = magic.convert(someJSON)
Run Code Online (Sandbox Code Playgroud)

我花了很多时间看Spark API,我能找到的最好的就是使用sqlContext这样的:

var someJSON : String = getJSONSomehow()
val tmpFile : Output = Resource
    .fromFile(s"/tmp/json/${UUID.randomUUID().toString()}")
tmpFile.write("hello")(Codec.UTF8)
val someDF : DataFrame = sqlContext.read().json(tmpFile)
Run Code Online (Sandbox Code Playgroud)

但这感觉有点尴尬/不稳定,并施加以下限制:

  1. 它要求我将每行JSON格式化为一个对象(每个文档); 和
  2. 它迫使我将JSON写入临时文件,这很慢而且很尴尬; 和
  3. 它迫使我随着时间的推移清理临时文件,这很麻烦,对我来说感觉"错误"

所以我问:是否有一种直接且更有效的方法将JSON字符串转换为Spark DataFrame?

json scala apache-spark spark-dataframe

5
推荐指数
1
解决办法
5547
查看次数

将StringType列添加到现有Spark DataFrame,然后应用默认值

Scala 2.10在这里使用Spark 1.6.2.我有一个类似(但不相同)的问题作为这一个,然而,接受的答案是不是SSCCE并承担一定的"前期知识"关于星火; 因此我无法复制或理解它.更重要的是,该问题也仅限于向现有数据框添加新列,而我需要为数据框中的所有现有行添加列值.


所以我想在现有的Spark DataFrame中添加一个列,然后将该新列的初始('default')值应用于所有行.

val json : String = """{ "x": true, "y": "not true" }"""
val rdd = sparkContext.parallelize(Seq(json))
val jsonDF = sqlContext.read.json(rdd)

jsonDF.show()
Run Code Online (Sandbox Code Playgroud)

当我运行时,我得到以下作为输出(通过.show()):

+----+--------+
|   x|       y|
+----+--------+
|true|not true|
+----+--------+
Run Code Online (Sandbox Code Playgroud)

现在我想jsonDF在创建它之后添加一个新字段,而不修改json字符串,这样得到的DF将如下所示:

+----+--------+----+
|   x|       y|   z|
+----+--------+----+
|true|not true| red|
+----+--------+----+
Run Code Online (Sandbox Code Playgroud)

意思是,我想z在DF类型中添加一个新的" "列StringType,然后默认所有行包含z-value "red".

从另一个问题我将以下伪代码拼凑在一起:

val json : String = """{ …
Run Code Online (Sandbox Code Playgroud)

scala dataframe apache-spark apache-spark-sql

5
推荐指数
1
解决办法
1万
查看次数

从单个字符串创建Spark DataFrame

我正在尝试使用硬编码的String并将其转换为1行Spark DataFrame(具有单列类型StringType),以便:

String fizz = "buzz"
Run Code Online (Sandbox Code Playgroud)

将导致DataFrame的.show()方法如下所示:

+-----+
| fizz|
+-----+
| buzz|
+-----+
Run Code Online (Sandbox Code Playgroud)

到目前为止,我最好的尝试是:

val rawData = List("fizz")
val df = sqlContext.sparkContext.parallelize(Seq(rawData)).toDF()

df.show()
Run Code Online (Sandbox Code Playgroud)

但是我得到以下编译器错误:

java.lang.ClassCastException: org.apache.spark.sql.types.ArrayType cannot be cast to org.apache.spark.sql.types.StructType
    at org.apache.spark.sql.SQLContext.createDataFrame(SQLContext.scala:413)
    at org.apache.spark.sql.SQLImplicits.rddToDataFrameHolder(SQLImplicits.scala:155)
Run Code Online (Sandbox Code Playgroud)

关于我哪里出错的想法?另外,如何设置"buzz"列的行值fizz


更新:

试:

sqlContext.sparkContext.parallelize(rawData).toDF()
Run Code Online (Sandbox Code Playgroud)

我得到一个DF看起来像:

+----+
|  _1|
+----+
|buzz|
+----+
Run Code Online (Sandbox Code Playgroud)

scala apache-spark spark-dataframe

5
推荐指数
1
解决办法
1万
查看次数

Spring MV 3.2 异常响应映射

Spring 3.2.15,这里基于 MVC 的 REST API(不是Spring Boot,遗憾的是!)。我正在尝试实现一个满足以下条件的异常映射器/处理程序:

  • 无论发生什么(成功或错误),Spring 应用程序始终返回一个响应实体MyAppResponse(见下文);和
  • 如果成功处理请求,则返回 HTTP 状态 200(典型);和
  • 如果处理请求并发生异常,我需要控制特定异常到特定 HTTP 状态代码的映射
    • Spring MVC 框架错误(例如BlahException)必须映射到 HTTP 422
    • 自定义应用程序例外,例如我FizzBuzzException有自己的状态映射方案:
      • FizzBuzzException-> HTTP 401
      • FooBarException-> HTTP 403
      • OmgException-> HTTP 404
    • 所有其他异常,即非 Spring 异常和非自定义应用程序异常(上面列出的 3 个),应该生成 HTTP 500

对象所在位置MyAppResponse

// Groovy pseudo-code
@Canonical
class MyAppResponse {
    String detail
    String randomNumber
}
Run Code Online (Sandbox Code Playgroud)

看起来也许ResponseEntityExceptionHandler为我做到这一点,但我并没有透过树木看到森林,因为它是如何传递参数的。我希望我能做这样的事情:

// Groovy-pseudo code
@ControllerAdvice
class MyAppExceptionMapper extends ResponseEntityExceptionHandler {
    ResponseEntity<Object> handleFizzBuzzException(FizzBuzzException …
Run Code Online (Sandbox Code Playgroud)

exception spring-mvc httpresponse

5
推荐指数
1
解决办法
2793
查看次数

Kafka控制台生产者和使用者的相关ID错误

我有2个由3个ZK节点支持的Kafkas。我想通过在每个节点上本地运行kafka-console-producer和-consumer来测试Kafka节点。

因此,我使用2个不同的终端通过SSH进入我的Kafka经纪人之一。在1号航站楼中,我按如下方式运行使用者:

/opt/kafka/bin/kafka-console-consumer.sh --zookeeper a.b.c.d:2181 --topic test1
Run Code Online (Sandbox Code Playgroud)

其中abcd是我的3个ZK节点之一的专用IP。

然后在2号航站楼中,我像这样运行生产者:

/opt/kafka/bin/kafka-console-producer.sh --broker-list localhost:9092 --topic test1
Run Code Online (Sandbox Code Playgroud)

我可以毫无问题地启动消费者和生产者。

但是,在生产者终端中,如果我通过输入一些文本(例如“ hello”)并按Enter键来在test1主题上“触发”消息,我将立即开始看到以下内容:

[2017-01-17 19:45:57,353] WARN Error while fetching metadata with correlation id 0 : {test1=LEADER_NOT_AVAILABLE} (org.apache.kafka.clients.NetworkClient)
[2017-01-17 19:45:57,372] WARN Error while fetching metadata with correlation id 1 : {test1=LEADER_NOT_AVAILABLE} (org.apache.kafka.clients.NetworkClient)
[2017-01-17 19:45:57,477] WARN Error while fetching metadata with correlation id 2 : {test1=LEADER_NOT_AVAILABLE} (org.apache.kafka.clients.NetworkClient)
[2017-01-17 19:45:57,582] WARN Error while fetching metadata with correlation id 3 : {test1=LEADER_NOT_AVAILABLE} (org.apache.kafka.clients.NetworkClient)
...and it keeps going!
Run Code Online (Sandbox Code Playgroud)

而且,在消费者终端中,即使启动消费者时没有出现任何错误,大约30秒后,我也会收到以下警告消息:

[2017-01-17 19:46:07,292] …
Run Code Online (Sandbox Code Playgroud)

apache-kafka

5
推荐指数
0
解决办法
6255
查看次数

Hibernate/JPA中涉及继承时如何指定列名?

我想我想在这里鱼和熊掌兼得,但我们会看看是否有一个合理的解决方案来满足我正在寻找的问题。我有一个 Spring Boot/JPA/Hibernate 应用程序,它将与 MySQL 作为其后备存储进行通信。我有几种情况,从 OOP 的角度来看,我的实体类形成了一个父/子层次结构,如下所示:

// Groovy pseudo-code!
class Vehicle {
  Long id
  Long maxSpeed
  String make
  String model
}

class Motorcycle extends Vehicle {
  Boolean isTwoStroke
}

class Car extends Vehicle {
  Boolean hasLeatherInterior
}
Run Code Online (Sandbox Code Playgroud)

通常,在 JPA 之外,我可能会像这样设计各自的表:

CREATE TABLE motorcycles (
  motorcycle_id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
  motorcycle_max_speed BIGINT UNSIGNED,
  motorcycle_make VARCHAR(50) NOT NULL,
  motorcycle_model VARCHAR(50) NOT NULL,
  motorcycle_is_two_speed BIT NOT NULL,

  # PK, FK, UC, index constraints down here (omitted for brevity)
);

CREATE …
Run Code Online (Sandbox Code Playgroud)

java groovy inheritance hibernate jpa

5
推荐指数
1
解决办法
1万
查看次数

Docker JSON文件日志记录驱动程序将文件写入何处?

我已经对一个示例应用程序进行了Docker化并将其配置为登录到STDOUT。然后,我运行容器而不指定logging-driver。根据Docker文档,应将STDOUT从容器中收集到JSON文件中...

但是它们在日志记录文档中都没有告诉您在哪里可以找到此JSON文件!

有什么想法可以在主机上找到该文件并检查其内容吗?

logging docker

5
推荐指数
1
解决办法
4249
查看次数

ARCore 或 ARKit 如何生成实时视频的实时增强?

大约一年前,我对构建自己的准系统增强现实 (AR) 库很感兴趣。我的目标是能够拍摄某物(任何真实的东西)的视频,然后能够在视频中放置增强(实际上并不存在的 3D 对象)。例如,我可能会拍摄我的客厅的视频,然后通过这个 AR 库/工具,我可以添加一个坐在咖啡桌上的怪物的 3D 头像。因此,在对这个主题或计算机视觉总体一无所知的情况下,我决定采用以下策略:

  1. 使用 3D 重建工具/技术(Structure from Motion,或 SfM)建立视频中所有内容的 3D 模型(例如我客厅的 3D 模型)
  2. 分析平面的 3D 模型(准确地说是 3D 点云)
  3. 添加我自己的逻辑来确定将哪些对象(3D 模型,例如 Blender 文件等)放置在视频 3D 模型的哪个区域(例如站在咖啡桌顶部的怪物)
  4. 最难的部分:推断视频每一帧中的摄像机方向,然后根据摄像机所指向的方向确定如何正确定向增强(例如怪物),然后将增强的 3D 模型“合并”到主模型中视频3D模型。这意味着当摄像机在我的客厅周围移动时,怪物似乎仍然站在我咖啡桌上的同一个地方。我从来没有找到一个好的解决方案,但我想如果我能到达第四步,我就会找到一些解决方案。

经过几个艰难的几周(计算机视觉很难!),我得到了以下一系列工具,并取得了不同程度的成功:

  1. 我能够将视频的样本帧(例如在客厅里走动时拍摄的视频)输入OpenMVG并生成稀疏点云PLY 文件/模型
  2. 然后我能够将该 PLY 文件输入MVE并生成它的密集点云(再次是 PLY 文件)
  3. 然后,我将密集点云和原始帧输入mvs-texturing,以生成视频的纹理 3D 模型

大约 30% 的时间里,这条管道运行得非常好!这是我家前面的模型。您可以看到我的 3D 前院、我儿子的 3D 剧场,甚至可以看到门窗!

在此输入图像描述

大约 70% 的情况下,管道会因难以辨认的错误而失败,或者生成看起来像抽象画的东西。此外,即使涉及自动化脚本,该工具也需要大约 30 分钟才能生成最终的 3D 纹理模型......非常慢。


好吧,看来Google ARCodeApple ARKit抢先了我!这些框架可以从您的智能手机获取实时视频源,并准确地完成我大约一年前一直试图完成的任务:实时 …

computer-vision augmented-reality 3d-reconstruction structure-from-motion arkit

5
推荐指数
1
解决办法
2211
查看次数

GitFlow 中剪切发布分支的实际命令

git 新手,正在尝试学习 GitFlow。使用 GitFlow,您经常会从develop分支上切下一个发布分支,以便您可以隔离新更改的子集并将它们部署到某个临时/非生产环境。但我实际上找不到可靠的文档来说明剪切这些发布分支的正确过程(命令方面)。是吗:

git checkout develop
git pull
git checkout -b release/1.1.3
git add .
git commit -m "Cutting release branch for v1.1.3."
git push
Run Code Online (Sandbox Code Playgroud)

或者是:

git checkout develop
git pull
git checkout -b release/1.1.3
git push origin release/1.1.3
Run Code Online (Sandbox Code Playgroud)

或者是别的什么?为什么?!

git github git-flow

5
推荐指数
1
解决办法
1万
查看次数

将图像上传到 Spring Boot 和 S3 all In-Memory

我有一个 Angular webapp,它使用 Spring Boot REST 服务作为其支持的 web 服务。

我正在为用户添加“个人资料”功能,作为其中的一部分,我想建立一个端点,允许用户为自己上传个人资料图像并立即将这些文件上传到 S3(我将在其中托管所有图像)。

看几个Spring Boot/文件上传教程:

似乎处理此类文件上传的标准方法是公开一个接受MultipartFiles如下的控制器端点:

@RestController
@RequestMapping("/v1/profiles")
public class ProfileController {
    @PostMapping("/photo")
    public ResponseEntity uploadProfilePhoto(@RequestParam("mpf") MultipartFile mpf)
        // ...
}
Run Code Online (Sandbox Code Playgroud)

查看所有这些代码,我无法判断该MultipartFile实例是否在内存中,或者 Spring 是否将其位置设置/tmp在磁盘上的某个位置(可能在?下)。

查看AWS S3 Java SDK 教程,上传基于磁盘的文件的标准方法似乎是这样的:

File file = new File(uploadFileName);
s3client.putObject(new PutObjectRequest(bucketName, keyName, file));
Run Code Online (Sandbox Code Playgroud)

所以看起来我必须在磁盘上有一个文件才能上传到 S3。

我想知道是否有办法将所有内容保存在内存中,或者这是否是一个坏主意,我应该坚持使用磁盘/File实例!

  • 有没有办法将整个配置文件图像(MultipartFile)保存在控制器方法中的内存中?
  • 有没有办法MultipartFile向 S3提供(也许通过序列化?!)一个实例PutObjectRequest
  • 或者这都是一个糟糕的主意(如果是这样,为什么?!)?

spring multipart amazon-s3 amazon-web-services spring-boot

5
推荐指数
1
解决办法
2233
查看次数