查看新的spark数据帧api,目前还不清楚是否可以修改数据帧列.
我怎么会去改变行的值x
列y
一个数据帧的?
在pandas
这将是df.ix[x,y] = new_value
编辑:合并下面所述的内容,您无法修改现有数据框,因为它是不可变的,但您可以返回具有所需修改的新数据框.
如果您只想根据条件替换列中的值,例如np.where
:
from pyspark.sql import functions as F
update_func = (F.when(F.col('update_col') == replace_val, new_value)
.otherwise(F.col('update_col')))
df = df.withColumn('new_column_name', update_func)
Run Code Online (Sandbox Code Playgroud)
如果要对列执行某些操作并创建添加到数据帧的新列:
import pyspark.sql.functions as F
import pyspark.sql.types as T
def my_func(col):
do stuff to column here
return transformed_value
# if we assume that my_func returns a string
my_udf = F.UserDefinedFunction(my_func, T.StringType())
df = df.withColumn('new_column_name', my_udf('update_col'))
Run Code Online (Sandbox Code Playgroud)
如果您希望新列与旧列具有相同的名称,则可以添加其他步骤:
df = df.drop('update_col').withColumnRenamed('new_column_name', 'update_col')
Run Code Online (Sandbox Code Playgroud) python apache-spark apache-spark-sql pyspark spark-dataframe
我有长格式的数据,我试图重塑到宽,但似乎没有一个直接的方法来使用融化/堆栈/取消堆栈:
Salesman Height product price
Knut 6 bat 5
Knut 6 ball 1
Knut 6 wand 3
Steve 5 pen 2
Run Code Online (Sandbox Code Playgroud)
变为:
Salesman Height product_1 price_1 product_2 price_2 product_3 price_3
Knut 6 bat 5 ball 1 wand 3
Steve 5 pen 2 NA NA NA NA
Run Code Online (Sandbox Code Playgroud)
我认为Stata可以使用reshape命令执行类似的操作.
我想通过替换子字符串在Spark Dataframe列上执行一些基本的词干.最快的方法是什么?
在我目前的用例中,我有一个我想要规范化的地址列表.例如,这个数据帧:
id address
1 2 foo lane
2 10 bar lane
3 24 pants ln
Run Code Online (Sandbox Code Playgroud)
会成为
id address
1 2 foo ln
2 10 bar ln
3 24 pants ln
Run Code Online (Sandbox Code Playgroud) 我需要找到最快的方法来对数据帧中的每一行进行排序,其中包含数百万行和大约一百列.
所以像这样:
A B C D
3 4 8 1
9 2 7 2
Run Code Online (Sandbox Code Playgroud)
需要成为:
A B C D
8 4 3 1
9 7 2 2
Run Code Online (Sandbox Code Playgroud)
现在我正在对每一行应用sort并逐行构建一个新的数据帧.我也在为每一行做一些额外的,不太重要的事情(因此我为什么要使用熊猫而不是numpy).是否可以更快地创建列表列表,然后立即构建新的数据帧?或者我需要去cython吗?
假设我使用的是在文本文件中读取的TextLineReader
.有没有办法把它分成火车和测试集Tensorflow
?就像是:
def read_my_file_format(filename_queue):
reader = tf.TextLineReader()
key, record_string = reader.read(filename_queue)
raw_features, label = tf.decode_csv(record_string)
features = some_processing(raw_features)
features_train, labels_train, features_test, labels_test = tf.train_split(features,
labels,
frac=.1)
return features_train, labels_train, features_test, labels_test
Run Code Online (Sandbox Code Playgroud) 我正在尝试使用混合精度在tpu上运行tf.keras模型。我想知道如何使用bfloat16混合精度构建keras模型。是这样吗
with tf.contrib.tpu.bfloat16_scope():
inputs = tf.keras.layers.Input(shape=(2,), dtype=tf.bfloat16)
logits = tf.keras.layers.Dense(2)(inputs)
logits = tf.cast(logits, tf.float32)
model = tf.keras.models.Model(inputs=inputs, outputs=logits)
model.compile(optimizer=tf.keras.optimizers.Adam(.001),
loss='mean_absolute_error', metrics=[])
tpu_model = tf.contrib.tpu.keras_to_tpu_model(
model,
strategy=tf.contrib.tpu.TPUDistributionStrategy(
tf.contrib.cluster_resolver.TPUClusterResolver(tpu='my_tpu_name')
)
)
Run Code Online (Sandbox Code Playgroud) python google-compute-engine keras tensorflow google-cloud-tpu
我正在尝试根据列中的值是否等于列表来过滤Spark数据帧.我想做这样的事情:
filtered_df = df.where(df.a == ['list','of' , 'stuff'])
Run Code Online (Sandbox Code Playgroud)
其中filtered_df
只包含行,其中的价值filtered_df.a
就是['list','of' , 'stuff']
和类型a
的array (nullable = true)
.
我有一个带有一列短句的火花数据框和一个带有分类变量的列.我想tf-idf
对句子执行one-hot-encoding
分类变量,然后将其输出到我的驱动程序上的稀疏矩阵,一旦它的尺寸小得多(对于scikit-learn模型).
以稀疏形式从火花中获取数据的最佳方法是什么?看起来toArray()
稀疏矢量只有一种方法,它输出numpy
数组.但是,文档确实说scipy稀疏数组可以用于代替spark sparse数组.
还要记住,tf_idf值实际上是一列稀疏数组.理想情况下,将所有这些功能集成到一个大型稀疏矩阵中会很不错.
使用tf.keras和数据集在TF 2.0中使用自定义损失函数和一个额外的参数时,我遇到很多麻烦。
在以下情况下,extra参数是模型中的输入数据,包含在中Dataset
。在1.14的情况下,我将.make_one_shot_iterator().get_next()
在数据集上运行,然后将张量传递到损失函数中。同一件事在2.0中不起作用。
class WeightedSDRLoss(keras.losses.Loss):
def __init__(self, noisy_signal, reduction=keras.losses.Reduction.AUTO, name='WeightedSDRLoss'):
super().__init__(reduction=reduction, name=name)
self.noisy_signal = noisy_signal
def sdr_loss(self, sig_true, sig_pred):
return (-tf.reduce_mean(sig_true * sig_pred) /
tf.reduce_mean(tf.norm(tensor=sig_pred) * tf.norm(tensor=sig_true)))
def call(self, y_true, y_pred):
noise_true = self.noisy_signal - y_true
noise_pred = self.noisy_signal - y_pred
alpha = (tf.reduce_mean(tf.square(y_true)) /
tf.reduce_mean(tf.square(y_true) + tf.square(self.noisy_signal - y_pred)))
return alpha * self.sdr_loss(y_true, y_pred) + (1 - alpha) * self.sdr_loss(noise_true, noise_pred)
data_x = np.random.rand(5, 4, 1)
data_y = np.random.rand(5, 4, 1)
x = keras.layers.Input([4, 1]) …
Run Code Online (Sandbox Code Playgroud) 也许这太啰嗦了.关于sklearn的随机森林的简单问题:
对于真/假分类问题,sklearn的随机森林中是否有一种方法可以指定用于训练每棵树的样本大小,以及真假观察的比例?
更多详情如下:
在随机森林的R实现中,名为randomForest,有一个选项sampsize()
.这允许您根据结果平衡用于训练每棵树的样本.
例如,如果您试图预测结果是真还是假,并且训练集中90%的结果都是假的,您可以设置sampsize(500, 500)
.这意味着每棵树将在训练集中随机抽样(替换)进行训练,其中500真实和500错误观察.在这些情况下,我发现模型在使用50%截止值时可以更好地预测真实结果,从而产生更高的kappas.
在sklearn实现中似乎没有这样的选项.
python ×8
apache-spark ×4
pyspark ×4
pandas ×2
tensorflow ×2
keras ×1
performance ×1
r ×1
reshape ×1
scikit-learn ×1
scipy ×1
tf-idf ×1
tf.keras ×1