我实际上要解决的问题是获取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数据帧作为数据帧返回的方法,或者将这些行列表转换为数据帧的方法.有任何想法吗?
我正在尝试使用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) 我有一个(可能)基本问题,关于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
我正在尝试生成一个函数,在数据框上创建一堆具有相同命名约定并使用相同逻辑的列.不幸的是,在创建变量时我遇到了一些奇怪的行为,我希望其他人可以解释这里发生了什么.
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) apache-spark ×2
pyspark ×2
python ×2
function ×1
postgresql ×1
pyspark-sql ×1
r ×1
sql ×1
string ×1
variables ×1