小编Abi*_*rty的帖子

createOrReplaceTempView如何在Spark中运行?

我是Spark和Spark SQL的新手.

如何createOrReplaceTempView在Spark工作?

如果我们将一个RDD对象注册为一个表,那么火花会将所有数据保存在内存中吗?

apache-spark apache-spark-sql spark-dataframe

35
推荐指数
2
解决办法
6万
查看次数

Spark SQL 中的 OFFSET 相当于什么?

我使用 Spark SQL 得到了 100 行的结果集。我想获得从第 6 行到第 15 行开始的最终结果。在 SQL 中,我们使用OFFSET跳过行,就像OFFSET 5 LIMIT 10用于获取从第 6 行到第 15 行的行一样。在 Spark SQL 中,我怎样才能实现相同的目的?

apache-spark apache-spark-sql

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

在 Spark SQL 中使用 ARRAY_CONTAINS 匹配多个值

我可以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)

hive apache-spark-sql

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

Spark SQL 使用 foldLeft 和 withColumn 替代 groupby/pivot/agg/collect_list 以提高性能

我有一个由三列组成的 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. …

apache-spark apache-spark-sql apache-spark-dataset

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

Spark SQL中的数组交集

我有一个名为数组类型列的表,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_INTERSECTIONARRAY_INTERSECT.我怎样才能实现我的目标Spark SQL

hiveql apache-spark apache-spark-sql spark-dataframe apache-spark-dataset

3
推荐指数
2
解决办法
4020
查看次数