我是Spark和Spark SQL的新手.
如何createOrReplaceTempView在Spark工作?
如果我们将一个RDD对象注册为一个表,那么火花会将所有数据保存在内存中吗?
我使用 Spark SQL 得到了 100 行的结果集。我想获得从第 6 行到第 15 行开始的最终结果。在 SQL 中,我们使用OFFSET跳过行,就像OFFSET 5 LIMIT 10用于获取从第 6 行到第 15 行的行一样。在 Spark SQL 中,我怎样才能实现相同的目的?
我可以ARRAY_CONTAINS单独使用函数ARRAY_CONTAINS(array, value1) AND ARRAY_CONTAINS(array, value2)来获得结果。但我不想ARRAY_CONTAINS多次使用。是否有一个函数可以检查数组中同时存在两个值。
** 根据评论更新 **
表包含:id、label、Array[type]、Array[feature]、textual1、numeric1 和 numeric2 列。
查询是:(
SELECT id, label, textual1
FROM table
WHERE
ARRAY_CONTAINS(type, 'productType1')
AND ARRAY_CONTAINS(feature, 'feature1')
AND ARRAY_CONTAINS(feature, 'feature2') AND numeric1 > 3)
UNION (
SELECT id, label, textual1
FROM table
WHERE
ARRAY_CONTAINS(type, 'productType1')
AND ARRAY_CONTAINS(feature, 'feature1')
AND ARRAY_CONTAINS(feature, 'feature3')
AND numeric2 > 4
)
ORDER BY label
Run Code Online (Sandbox Code Playgroud) 我有一个由三列组成的 Spark DataFrame:
id | col1 | col2
-----------------
x | p1 | a1
-----------------
x | p2 | b1
-----------------
y | p2 | b2
-----------------
y | p2 | b3
-----------------
y | p3 | c1
Run Code Online (Sandbox Code Playgroud)
申请后,df.groupBy("id").pivot("col1").agg(collect_list("col2"))我得到以下数据帧(aggDF):
+---+----+--------+----+
| id| p1| p2| p3|
+---+----+--------+----+
| x|[a1]| [b1]| []|
| y| []|[b2, b3]|[c1]|
+---+----+--------+----+
Run Code Online (Sandbox Code Playgroud)
然后我找到除了列之外的id列的名称。
val cols = aggDF.columns.filter(x => x != "id")
Run Code Online (Sandbox Code Playgroud)
之后我cols.foldLeft(aggDF)((df, x) => df.withColumn(x, when(size(col(x)) > 0, col(x)).otherwise(lit(null))))用null. …
我有一个名为数组类型列的表,writer其值为array[value1, value2],array[value2, value3]....等.
我正在做的self join是获得在数组之间具有共同值的结果.我试过了:
sqlContext.sql("SELECT R2.writer FROM table R1 JOIN table R2 ON R1.id != R2.id WHERE ARRAY_INTERSECTION(R1.writer, R2.writer)[0] is not null ")
Run Code Online (Sandbox Code Playgroud)
和
sqlContext.sql("SELECT R2.writer FROM table R1 JOIN table R2 ON R1.id != R2.id WHERE ARRAY_INTERSECT(R1.writer, R2.writer)[0] is not null ")
Run Code Online (Sandbox Code Playgroud)
但有同样的例外:
线程"main"中的异常org.apache.spark.sql.AnalysisException:未定义的函数:'ARRAY_INTERSECT'.此函数既不是已注册的临时函数,也不是在数据库'default'中注册的永久函数.第1行pos 80
可能Spark SQL不支持ARRAY_INTERSECTION和ARRAY_INTERSECT.我怎样才能实现我的目标Spark SQL?
hiveql apache-spark apache-spark-sql spark-dataframe apache-spark-dataset