簡體   English   中英

Python Spark 基於列隨機抽樣

[英]Python Spark take random sample based on column

這是我的 python 火花代碼

def parseLinesEcf4(line): #get the fields we need
    fields = line.split('\t')
    id1 = fields[0]
    id2 = fields[1]
    ecfp4 = float(fields[2])
    return (id1, id2, ecfp4) #return two fields

conf = SparkConf().setMaster("local").setAppName("Second")
sc = SparkContext(conf = conf)
fileTwo = sc.textFile("PS21_ECFP4.tsv") #loads the data
dataTwo = fileTwo.map(parseLinesEcf4)

我的輸入看起來像這樣

在此處輸入圖像描述

我的文件大小約為 900GB。 我需要的是獲取第 1 列的唯一值對應於同一列的唯一值的 10% 的行,因為一種化合物具有多個條目。

我嘗試了 takeSampe() 和 sampleBy() 但兩者都沒有返回我正在尋找的內容。

有什么幫助嗎??

您可以嘗試使用 pyspark.ml 庫。

from pyspark.ml.evaluation import RegressionEvaluator
from pyspark.ml.regression import LinearRegression
from pyspark.ml.tuning import ParamGridBuilder, TrainValidationSplit

# Prepare training and test data.
data = spark.read.format("libsvm")\
    .load("data/mllib/sample_linear_regression_data.txt")
train, test = data.randomSplit([0.9, 0.1], seed=12345)

https://spark.apache.org/docs/2.1.0/ml-tuning.html#example-model-selection-via-train-validation-split

但請注意,要使用它,您需要使用VectorAssembler對數據進行矢量化

from pyspark.ml.linalg import Vectors
from pyspark.ml.feature import VectorAssembler

dataset = spark.createDataFrame(
    [(0, 18, 1.0, Vectors.dense([0.0, 10.0, 0.5]), 1.0)],
    ["id", "hour", "mobile", "userFeatures", "clicked"])

assembler = VectorAssembler(
    inputCols=["hour", "mobile", "userFeatures"],
    outputCol="features")

output = assembler.transform(dataset)
print("Assembled columns 'hour', 'mobile', 'userFeatures' to vector column 'features'")
output.select("features", "clicked").show(truncate=False)

https://spark.apache.org/docs/latest/ml-features.html#vectorassembler

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM