小编csh*_*in9的帖子

在BigQuery中使用

BigQuery是否支持该WITH条款?我不喜欢格式化太多的子查询.

例如:

WITH alias_1 AS (SELECT foo1 c FROM bar)
, alias_2 AS (SELECT foo2 c FROM bar a, alias_1 b WHERE b.c = a.c)
SELECT * FROM alias_2 a;
Run Code Online (Sandbox Code Playgroud)

sql common-table-expression google-bigquery

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

将变量设置为None或删除它之间有区别吗?

如果通过设置清除变量,性能或内存是否会有明显差异

x = 'something'
x = None
Run Code Online (Sandbox Code Playgroud)

而不是

x = 'something'
del x
Run Code Online (Sandbox Code Playgroud)

对于很多变量?

python python-2.7

8
推荐指数
2
解决办法
1552
查看次数

如何在Spark中均匀重新分配?

为了测试.repartition()工作原理,我运行了以下代码:

rdd = sc.parallelize(range(100))
rdd.getNumPartitions()
Run Code Online (Sandbox Code Playgroud)

rdd.getNumPartitions()结果4.然后我跑了:

rdd = rdd.repartition(10)
rdd.getNumPartitions()
Run Code Online (Sandbox Code Playgroud)

rdd.getNumPartitions()这次导致了10,所以现在有10个分区.

但是,我通过以下方式检查了分区:

rdd.glom().collect()
Run Code Online (Sandbox Code Playgroud)

结果给出了4个非空列表和6个空列表.为什么没有任何元素被分发到其他6个列表?

apache-spark pyspark

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

如何在BigQuery表中选择最新的分区?

我试图从日期分区的BigQuery表中的最新分区中选择数据,但查询仍然从整个表中读取数据.

我试过(据我所知,BigQuery不支持QUALIFY):

SELECT col FROM table WHERE _PARTITIONTIME = (
  SELECT pt FROM (
    SELECT pt, RANK() OVER(ORDER by pt DESC) as rnk FROM (
      SELECT _PARTITIONTIME AS pt FROM table GROUP BY 1)
    )
  )
  WHERE rnk = 1
);
Run Code Online (Sandbox Code Playgroud)

但这不起作用并读取所有行.

SELECT col from table WHERE _PARTITIONTIME = TIMESTAMP('YYYY-MM-DD')
Run Code Online (Sandbox Code Playgroud)

'YYYY-MM-DD'特定日期在哪里工作.

但是,我需要在将来运行此脚本,但表更新(和_PARTITIONTIME)是不规则的.有没有办法只从BigQuery的最新分区中提取数据?

google-bigquery

7
推荐指数
4
解决办法
6025
查看次数

在 Spark 上排名()的有效方法?

我在 PySpark 上有一个三列数据框,我试图在其上执行RANK() OVER(PARTITION BY ... ORDER BY ...)与 SQL 相同的操作。数据框df看起来像:

col1, col2, score
A   , B   , 0.500
...
Run Code Online (Sandbox Code Playgroud)

我知道我可以为此使用窗口函数:

from pyspark.sql.window import Window
from pyspark.sql import functions as F

windowSpec = Window.partitionBy(df['col1']).orderBy(df['score'].desc())
df = df.select('col1', 'col2', 'score', F.rank().over(windowSpec).alias('rnk'))
Run Code Online (Sandbox Code Playgroud)

对于非常大的df,这需要花费大量时间跨分区整理数据。有什么办法可以提高效率吗?(如果没有必要,我不需要使用数据框。)

hadoop apache-spark pyspark

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

如何从 CSV 导入中删除尾随空格?

我有一个 CSV 文件,如下所示:

1 ,A ,a 
2 ,B ,b 
99,ZZ,zz
Run Code Online (Sandbox Code Playgroud)

如何导入 CSV 以删除尾随空格?

python python-2.7

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

如何为PySpark的Window功能设置分区?

我正在运行PySpark作业,并且收到以下消息:

WARN org.apache.spark.sql.execution.Window: No Partition Defined for Window operation! Moving all data to a single partition, this can cause serious performance degradation.
Run Code Online (Sandbox Code Playgroud)

该消息表示什么,以及如何为Window操作定义分区?

编辑:

我正在尝试对整列进行排名。

我的数据组织为:

A
B
A
C
D
Run Code Online (Sandbox Code Playgroud)

而且我要:

A,1
B,3
A,1
C,4
D,5
Run Code Online (Sandbox Code Playgroud)

我不认为应该只有.orderBy()来使用.partitionBy()。问题是,这似乎导致性能下降。没有Window功能,还有另一种方法可以实现这一点吗?

如果按第一列划分,结果将是:

A,1
B,1
A,1
C,1
D,1
Run Code Online (Sandbox Code Playgroud)

我不要。

apache-spark apache-spark-sql pyspark google-cloud-dataproc

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

如何不计算 DENSE_RANK() 中的 NULL 值?

假设我有下表:

col
NULL
1
1
2
Run Code Online (Sandbox Code Playgroud)

然后我选择:

SELECT col, DENSE_RANK() OVER(ORDER BY col) as rnk from table
Run Code Online (Sandbox Code Playgroud)

然后我得到:

col  rnk
NULL 1
1    2
1    2
2    3
Run Code Online (Sandbox Code Playgroud)

我想要得到的是这样的:

col  rnk
NULL NULL
1    1
1    1
2    2
Run Code Online (Sandbox Code Playgroud)

但如果我查询:

SELECT col, CASE WHEN col IS NOT NULL THEN DENSE_RANK() OVER(ORDER BY col) END as rnk from table
Run Code Online (Sandbox Code Playgroud)

然后我得到:

col  rnk
NULL NULL
1    2
1    2
2    3
Run Code Online (Sandbox Code Playgroud)

NULL除了使用子句之外,还有其他方法可以在排名时忽略 s 吗WHERE?我还有一些其他列,其行不能省略。

sql google-bigquery

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

BigQuery中的EXP()返回浮点错误

我有以下查询:

SELECT EXP(col) FROM `project.dataset.tablename`;
Run Code Online (Sandbox Code Playgroud)

哪里colFLOAT。但是,出现此错误:Error: Floating point error in function: EXP

我已经尝试过EXP()使用伪数据,并且它可以工作。例如:

SELECT EXP(col) FROM (
    SELECT 1. as col UNION ALL
    SELECT 2. as col);
Run Code Online (Sandbox Code Playgroud)

为什么我会在实际数据中出现浮点错误,如何解决呢?我已经尝试过诸如EXP(CAST(col as FLOAT64))和的操作EXP(ROUND(col, n)),但是仍然遇到相同的错误。

sql google-bigquery

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

在BigQuery上创建表?

如何从另一个现有表创建BigQuery表?

例如,我有一张桌子:

col_1, col_2, val
...  , ...  , ...
Run Code Online (Sandbox Code Playgroud)

我想创建一个新表:

CREATE TABLE new_table AS (
SELECT col_1, SUM(val) AS sum_val FROM old_table) WITH DATA;
Run Code Online (Sandbox Code Playgroud)

但是,我不能先查询结果然后保存结果,因为结果太大.

sql google-bigquery

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