Как получить случайные n процентов строк в Pyspark, используя SQL - PullRequest
1 голос
/ 20 марта 2020

Использование образца

Я знаю, что мы можем сделать это:

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 .
Как заставить это работать?

...