Невозможно псевдоним DataFrame в Pypsark - PullRequest
0 голосов
/ 31 января 2020

Я пишу простой сценарий DataFrame в Pyspark, но не могу "псевдоним" dataframe. Что я делаю неправильно.

from pyspark.sql import SparkSession
from pyspark.conf import SparkConf 
from pyspark.sql.types import IntegerType,StructType,StructField,StringType,IntegerType 

spark = SparkSession.builder.appName('myDFApp').master('local').getOrCreate() 
sc = spark.sparkContext 

input_data = [('retail', '2017-01-03T13:21:00', 134), 
    ('marketing', '2017-01-03T13:21:00', 100)] 
rdd_schema = StructType([StructField('business', StringType(), True), \ 
    StructField('date', StringType(), True), \
    StructField("US.sales", IntegerType(), True)])

input_df = spark.createDataFrame(input_data, rdd_schema)
print('Count= ', input_df.count())

# this line below works 
df_1 = input_df.select((input_df.business).alias('partnership'))

# this line does not work
df_2 = input_df.alias("s"). \
    where(s.date > "2016-01-03") 

df_2.show() 

Ошибка, которую я получаю:

Count=  2
Traceback (most recent call last):
  File "/home/hadoop/opt/inscape/test_dataframe.py", line 22, in <module>
    where(s.date > "2016-01-03")
NameError: name 's' is not defined

Что я делаю не так?

Спасибо

1 Ответ

0 голосов
/ 31 января 2020

Когда вы создаете псевдоним фрейма данных, вы изменяете имя ссылки в метаданных Spark, а не переменную ссылки в Python, в Python имя кадра данных по-прежнему будет input_df. Вы можете использовать объект col, чтобы иметь доступ к s кадру данных. Попробуйте следующее, чтобы исправить это:

from pyspark.sql.functions import *

df_2 = input_df.alias("s"). \
    where(col("s.date") > "2016-01-03") 
...