所以我有一个固定宽度的文件,我不知道它的格式,直到它的某个变量是'01'还是'02'。所以我试着创造这样的东西:
myreport= spark.read.text("/mnt/path/mydata")
myreport= myreport.select(myreport.value.substr(1,3).alias('client'),
myreport.value.substr(4,2).alias('rptnum'),
if rptnum = '01', then
myreport.value.substr(6,2).cast('integer').alias('mo1'),
myreport.value.substr(8,2).cast('integer').alias('mo2'),
myreport.value.substr(12,2).cast('integer').alias('mo3'),
Else
myreport.value.substr(6,2).cast('integer').alias('mo1'),
myreport.value.substr(8,2).cast('integer').alias('mo2'),
myreport.value.substr(12,2).cast('integer').alias('mo3'),
myreport.value.substr(14,2).cast('integer').alias('mo4'),
myreport.value.substr(16,2).cast('integer').alias('mo5'),
myreport.value.substr(18,2).cast('integer').alias('mo6'),
基本上,如果rpt编号不是01,列的数量会加倍。很不确定如何在pyspark中实现这一点
您将编写从
df.rdd.map()
调用的函数并转换/解析每一行。您可以创建相同数量的列,但在一种情况下,有些列将为空。在rptnum上使用filter()
,可以分离出行并选择相应的列。在相关问题 更多 >
编程相关推荐