小编Tur*_*hin的帖子

PySpark - 将行列表转换为数据帧

实际上要解决的问题是获取PySpark数据帧的前N行或后N行,并将结果作为数据帧.具体来说,我希望能够做到这样的事情:

 my_df.head(20).toPandas()
Run Code Online (Sandbox Code Playgroud)

但是,因为head()返回行列表,我收到此错误:

AttributeError: 'list' object has no attribute 'toPandas'
Run Code Online (Sandbox Code Playgroud)

所以,我正在寻找将前N行PySpark数据帧作为数据帧返回的方法,或者将这些行列表转换为数据帧的方法.有任何想法吗?

python apache-spark pyspark pyspark-sql

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

PySpark中具有多列的日期算法

我正在尝试使用PySpark数据框中的多个列进行一些中等复杂的日期算术.基本上,我有一个名为column的列number表示created_at我需要过滤的时间戳之后的周数.在PostgreSQL中,你可以根据列中的值乘以一个间隔,但我似乎无法弄清楚如何使用SQL API或Python API在PySpark中执行此操作.这里的任何帮助将不胜感激!

import datetime
from pyspark.sql import SQLContext
from pyspark.sql import Row
from pyspark import SparkContext

sc = SparkContext()
sqlContext = SQLContext(sc)
start_date = datetime.date(2020,1,1)

my_df = sc.parallelize([
        Row(id=1, created_at=datetime.datetime(2020, 1, 1), number=1,  metric=10),
        Row(id=1, created_at=datetime.datetime(2020, 1, 1), number=2,  metric=10),
        Row(id=1, created_at=datetime.datetime(2020, 1, 1), number=3,  metric=10),
        Row(id=2, created_at=datetime.datetime(2020, 1, 15), number=1,  metric=20),
        Row(id=2, created_at=datetime.datetime(2020, 1, 15), number=2,  metric=20),
        Row(id=3, created_at=datetime.datetime(2020, 7, 1), number=7,  metric=30),
        Row(id=3, created_at=datetime.datetime(2020, 7, 1), number=8,  metric=30),
        Row(id=3, …
Run Code Online (Sandbox Code Playgroud)

python apache-spark pyspark spark-dataframe

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

在WITH子句中添加无关表是否会减慢PostgreSQL中的查询速度?

我有一个(可能)基本问题,关于Postgres如何执行包含WITH子句的查询.我想知道在WITH子句中包含多余的表是否会减慢查询速度.也就是说,如果在WITH子句中创建的"临时"表永远不会在子句之外调用WITH,那么实际创建的是"临时"表吗?

在第一个例子中,我正在加入两个使用WITH子句创建的"临时"表:

--Example 1
WITH temp1 as (
SELECT * from table_1
),
temp2 as (
select * from table_2
)
select * 
from temp1
join temp2;
Run Code Online (Sandbox Code Playgroud)

在第二个例子中,我正在执行完全相同的查询,除了在WITH子句中创建了一个无关的表"temp3" .

--Example 2
WITH temp1 as (
SELECT * from table_1
),
temp2 as (
select * from table_2
),
temp3 as (
select * from table_3
)
select * 
from temp1
join temp2;
Run Code Online (Sandbox Code Playgroud)

这两个查询之间有任何性能差异吗?如果table_3是一个巨大的表,这会减慢示例2与示例1中的查询吗?如果没有,为什么不呢?

好像它不会影响查询时间.我仍然很好奇为什么,尽管......

sql postgresql common-table-expression postgresql-performance

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

使用字符串名称在功能上创建变量

我正在尝试生成一个函数,在数据框上创建一堆具有相同命名约定并使用相同逻辑的列.不幸的是,在创建变量时我遇到了一些奇怪的行为,我希望其他人可以解释这里发生了什么.

df <- data.frame(var1 = c(1,2,3), var2 = c(3,4,5), var3 = c("foo", "bar", "baz"))

DoesNotWork <- function(df, varname){
  df[paste(varname, "_square", sep = "")] <- df[varname]^2
  return(df)
}

dfBad <- DoesNotWork(df, "var1")

dfBad
      var1 var2 var3 var1
  1    1    3  foo    1
  2    2    4  bar    4
  3    3    5  baz    9
Run Code Online (Sandbox Code Playgroud)

dfBad这里有两个变量,var1而不是一个被调用的变量var1,一个变量被调用,var1_squared正如我所希望的那样.

下面的函数通过将原始变量的所有值分配给新变量名,然后仅对新变量执行相同操作来解决此问题,但这有点令人讨厌,我不确定会发生什么如果我需要使用多个变量的逻辑.

Works <- function(df, varname){
   df[paste(varname, "_square", sep = "")] <- df[varname]
   df[paste(varname, "_square", sep = "")] <- df[paste(varname, "_square", sep …
Run Code Online (Sandbox Code Playgroud)

string variables r function

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