Использование образца
Я знаю, что мы можем сделать это:
sdf.sample(fraction=0.2)
Но я бы хотел добиться того же результата, используя SQL.
Настройка
import numpy as np
import pandas as pd
import pyspark
spark = pyspark.sql\
.SparkSession\
.builder\
.appName('app')\
.getOrCreate()
# sql
from pyspark.sql import functions as F
from pyspark.sql.types import *
from pyspark import SparkConf, SparkContext, SQLContext
sc = spark.sparkContext
sqlContext = SQLContext(sc)
df = pd.DataFrame({
'id': np.random.randint(0,100000,365*3),
'date': pd.date_range('2010-01-01',periods=365*3)
})
df.head()
sdf = sqlContext.createDataFrame(df)
sdf.printSchema()
sdf.show(5)
# create table
sdf.createOrReplaceTempView("MyTable")
spark.sql("select * from MyTable limit 2").show()
Моя попытка
q = """
select * from MyTable
order by RANDOM()
limit (
select cast(0.2 * count(*) as int) from MyTable
)
"""
q_ms_sql = """
Select top 2 percent
*
From Mytable
Order By NewID()
""";
spark.sql(q).show()
Мне нравится получать 2% случайных данных.
Запрос q работает как обычно SQL, но не работает в pyspark .
Как заставить это работать?