Я хочу проверить каждый столбец фрейма данных pyspark, и если столбец соответствует указанным c dtypes, он будет выполнять определенные функции. ниже мои коды и набор данных.
набор данных:
from pyspark.sql import SparkSession
spark = SparkSession.builder.master('local').appName('Word Count').config('spark.some.config.option', 'some-value').getOrCreate()
df = spark.createDataFrame(
[
('A',1),
('A', 2),
('A',3),
('A', 4),
('B',5),
('B', 6),
('B',7),
('B', 8),
],
['id', 'v']
) #I save this to csv so can just ignore my read csv park below.
Коды:
from pyspark.sql import SQLContext
from pyspark.sql.types import *
from pyspark import SparkContext
sqlContext = SQLContext(sc)
df = sqlContext.read.load('test.csv',
format ='com.databricks.spark.csv',
header='true',
inferSchema='true')
from functools import reduce
from pyspark.sql.functions import col
import numpy as np
i = (reduce(lambda x, y: x.withColumn(y, np.where(col(y).dtypes != 'str', col(y)+2, col(y))), df.columns, df)) # this is the part that I wanted to change.
Запрос на боковое обучение: Если возможно, кто-нибудь может сказать мне, как редактировать только указанный столбец c? Я понимаю использование .select, но может кто-нибудь показать некоторые примеры с некоторыми наборами данных, если это возможно. спасибо
Мой ожидаемый результат:
+---+---+
| id| v|
+---+---+
| A| 3|
| A| 4|
| A| 5|
| A| 6|
| B| 7|
| B| 8|
| B| 9|
| B| 10|
+---+---+
Примечание: я новичок в pyspark, поэтому я не понимаю, почему нужно использовать 'col'. что это вообще на самом деле?