我正在尝试通过该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)
谢谢。
如何在 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
我读了火花文件,其中说
在拟合过程中,
CountVectorizer将在vocabSize整个语料库中选择按词频排序的前几个词。一个可选参数minDF还通过指定术语必须出现在词汇表中的最小文档数(如果 < 1.0 则为分数)影响拟合过程。
谁能更清楚地向我解释一下?
我正在 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)