首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在二进制字段上加入?

如何在二进制字段上加入?
EN

Stack Overflow用户
提问于 2017-06-09 14:23:49
回答 1查看 908关注 0票数 4

在Scala/Spark中,我试图做以下工作:

代码语言:javascript
复制
val portCalls_Ports = 
  portCalls.join(ports, portCalls("port_id") === ports("id"), "inner")

但是,我得到了以下错误:

代码语言:javascript
复制
Exception in thread "main" org.apache.spark.sql.AnalysisException: 
     binary type expression port_id cannot be used in join conditions;

确实,这是一个二进制类型:

代码语言:javascript
复制
root
 |-- id: binary (nullable = false)
 |-- port_id: binary (nullable = false)
     .
     .
     .

+--------------------+--------------------+
|                  id|             port_id|
+--------------------+--------------------+
|[FB 89 A0 FF AA 0...|[B2 B2 84 B9 52 2...|

ports("id")也是。

我正在使用以下库:

代码语言:javascript
复制
scalaVersion := "2.11.11"
libraryDependencies ++= Seq(
  // Spark dependencies
  "org.apache.spark" %% "spark-hive" % "1.6.2",
  "org.apache.spark" %% "spark-mllib" % "1.6.2",
  // Third-party libraries
  "postgresql" % "postgresql" % "9.1-901-1.jdbc4",
  "net.sf.jopt-simple" % "jopt-simple" % "5.0.3"
)

请注意,我正在使用JDBC读取数据库表。

解决这个问题的最好方法是什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-06-09 14:47:19

Pre Spark2.1.0,我所知道的最佳解决方法是使用base64函数将二进制列转换为String,并比较以下几个方面:

代码语言:javascript
复制
import org.apache.spark.sql.functions._

val portCalls_Ports =
  portCalls.join(ports, base64(portCalls("port_id")) === base64(ports("id")), "inner")
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44460275

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档