小编phi*_*ert的帖子

使用 Spark JDBC 指定 jceks 文件

我正在尝试通过该sqlContext.read.format("json")方法连接到 Oracle 。一切顺利,但在创建 JDBC 字符串时,我必须在字符串中指定数据库的用户名和密码:

val jdbcString = "jdbc:oracle:thin:USERNAME/PASSWORD@//HOSTNAME:PORT/SID"
Run Code Online (Sandbox Code Playgroud)

但是,我jceks在 HDFS 上确实有一个包含密码的文件。我想知道是否有任何方法可以利用该文件连接到 JDBC 而不是纯文本密码?就像在 Sqoop 中一样,我们可以这样做:

sqoop import -Dhadoop.security.credential.provider.path=jceks://hdfs/data/credentials/oracle.password.jceks
Run Code Online (Sandbox Code Playgroud)

谢谢。

hadoop jdbc apache-spark apache-spark-sql

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

火花中的“_._2”是什么意思

这是 Spark/Scala 中的一段代码:

 rdd.sortBy(_._2)
Run Code Online (Sandbox Code Playgroud)

这里是什么_._2意思?

scala apache-spark

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

spark sql动态过滤条件

如何在 spark sql 中动态构建布尔过滤条件?拥有:

val d = Seq(1, 2, 3, 5, 6).toDF
d.filter(col("value") === 1 or col("value") === 3).show
Run Code Online (Sandbox Code Playgroud)

我怎样才能动态复制这个:

val desiredThings = Seq(1,3)
Run Code Online (Sandbox Code Playgroud)

我尝试构建过滤器:

val myCondition = desiredThings.map(col("value") === _)
d.filter(myCondition).show
Run Code Online (Sandbox Code Playgroud)

但失败:

overloaded method value filter with alternatives:
org.apache.spark.api.java.function.FilterFunction[org.apache.spark.sql.Row]
 cannot be applied to (Seq[org.apache.spark.sql.Column])
Run Code Online (Sandbox Code Playgroud)

执行时

d.filter(myCondition).show
Run Code Online (Sandbox Code Playgroud)

同样在尝试向左折叠时:

val myCondition = desiredThings.foldLeft()((result, entry) => result && col(c.columnCounterId) === entry)
Run Code Online (Sandbox Code Playgroud)

我有编译错误。

如何调整代码以动态生成过滤谓词?

dynamic filter apache-spark apache-spark-sql spark-dataframe

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

pyspark 中 CountVectorizer 的 minDF 参数是什么?

我读了火花文件,其中说

在拟合过程中,CountVectorizer将在vocabSize整个语料库中选择按词频排序的前几个词。一个可选参数minDF还通过指定术语必须出现在词汇表中的最小文档数(如果 < 1.0 则为分数)影响拟合过程。

谁能更清楚地向我解释一下?

python apache-spark pyspark

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

Scala 中的嵌套字符串插值

我正在 RDBMS 上执行查询并获取字符串形式的结果。字符串看起来像这样:

val DBASE = "my_database"
val FREQ = "monthly"
val queryResult: String = sqlContext.read.jdbc(...).collect.map(...).first
// queryResult = Database is $$${DBASE} and frequency is $$${FREQ}
Run Code Online (Sandbox Code Playgroud)

接下来我将替换$$$为$,所以我留下类似的内容:

queryResult = "Database is ${DBASE} and frequency is ${FREQ}"
Run Code Online (Sandbox Code Playgroud)

如何在DBASE和上使用字符串插值FREQ?我努力了:

val substituted = f"${queryResult}"
Run Code Online (Sandbox Code Playgroud)

和

val substituted = s"${queryResult}"
Run Code Online (Sandbox Code Playgroud)

但变量并没有被替换。除了使用以下内容之外,我还能做些什么:

queryResult.replaceAll("\\$\\{DBASE\\}", DBASE).replaceAll(...)
Run Code Online (Sandbox Code Playgroud)

scala string-interpolation

0
推荐指数
1
解决办法
1215
查看次数