一个PySpark Dataframe
是以下格式:如何选择所有列而不是每个硬编码?
要刚刚访问stddev
行的列C1,C2,C3我使用的:
df.describe().createOrReplaceTempView("table1")
df2 = sqlContext.sql("SELECT c1 AS f1, c2 as f2, c3 as f3 from table1")
ddd = df2.rdd.map(lambda x : (float(x.f1) , float(x.f2) , float(x.f3))).zipWithIndex().filter(lambda x: x[1] == 2).map(lambda x : x[0])
print type(ddd)
print type(ddd.collect())
print ddd.collect()
此打印:
<class 'pyspark.rdd.PipelinedRDD'>
<type 'list'>
[(0.7071067811865476, 0.7071067811865476, 0.7071067811865476)]
如何为所有列选择stddev
值:c1,c2,c3,c 4,c5并为这些选择生成数据类型[(0.7071067811865476, 0.7071067811865476, 0.7071067811865476....
,而不是将每个值硬编码到SQL字符串中?所以列数可以是可变的:5,10列等...
要完成这5列,我认为使用"SELECT c1 AS f1, c2 as f2, c3 as f3, c4 as f4, c5 as f5 from table1"
,但是有一个更清洁的方法,而不是硬编码SQL中的每个值,然后相应硬编码生成rdd时的值:df2.rdd.map(lambda x : (float(x.f1) , float(x.f2).....
由于我的解决方案不适用于长度不同的列。