Skip to content

Instantly share code, notes, and snippets.

@wwb
Created August 1, 2012 15:16
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save wwb/3227714 to your computer and use it in GitHub Desktop.
Save wwb/3227714 to your computer and use it in GitHub Desktop.
complex map / reduce example
public class MapReadingDocument
{
public MapReadingDocument()
{
Created = DateTimeOffset.Now;
FederalInfo = new FederalCoordinates();
TransmissionTech = TransmissionTechnology.AllOtherTransmissionTechs;
MaxAdvertisedUp = new TransmissionSpeed();
MaxAdvertisedDown = new TransmissionSpeed();
TypicalUpload = new TransmissionSpeed();
TypicalDownload = new TransmissionSpeed();
DownloadSpeed= new TransmissionSpeed();
UploadSpeed = new TransmissionSpeed();
}
public int Id { get; set; }
public DateTimeOffset Created { get; set; }
public string SurveyId { get; set; }
public string StateAbbreviation { get; set; }
public string ProviderName { get; set; }
public string DoingBusinessAsName { get; set; }
public string HoldingCompanyId { get; set; }
public string HoldingCompanyName { get; set; }
public int PopulationPassed { get; set; }
public int HousingUnitsPassed { get; set; }
public FederalCoordinates FederalInfo { get; set; }
public TransmissionTechnology TransmissionTech { get; set; }
public TransmissionSpeed MaxAdvertisedUp { get; set; }
public TransmissionSpeed MaxAdvertisedDown { get; set; }
public TransmissionSpeed TypicalUpload { get; set; }
public TransmissionSpeed TypicalDownload { get; set; }
public TransmissionSpeed DownloadSpeed { get; set; }
public TransmissionSpeed UploadSpeed { get; set; }
}
public class TransmissionSpeed
{
public string TypeId { get; set; }
public string Name { get; set; }
public int MinimumSpeed { get; set; }
public int MaximumSpeed { get; set; }
}
public class TransmissionTechnology
{
public string TypeId { get; set; }
public string Name { get; set; }
}
public class ProviderByStateAndService : AbstractIndexCreationTask<MapReadingDocument, ProviderByStateAndService.Result>
{
public class Result
{
public string StateAbbreviation { get; set; }
public string StateFipsId { get; set; }
public string ProviderName { get; set; }
public string FccLicenseId { get; set; }
public string HoldingCompanyId { get; set; }
public string HoldingCompanyName { get; set; }
public string TechnologyTypeId { get; set; }
public string TechnologyTypeName { get; set; }
public int PopulationPassed { get; set; }
public int HousingUnitsPassed { get; set; }
public string[] MappingDocuments { get; set; }
}
public ProviderByStateAndService()
{
Map = mdocs => from md in mdocs
select new
{
StateAbbreviation = md.StateAbbreviation,
StateFipsId = md.FederalInfo.StateFipsId,
ProviderName = md.ProviderName,
FccLicenseId = md.FederalInfo.FccIdentifier,
HoldingCompanyId = md.HoldingCompanyId,
HoldingCompanyName = md.HoldingCompanyName,
TechnologyTypeName = md.TransmissionTech.Name,
TechnologyTypeId = md.TransmissionTech.TypeId,
PopulationPassed = (int)md.PopulationPassed,
HousingUnitsPassed = (int)md.HousingUnitsPassed,
MappingDocuments = new string[] { md.Id.ToString() }
};
Reduce = results => from r in results
group r by new {r.FccLicenseId, r.ProviderName, r.StateAbbreviation, r.HoldingCompanyId, r.HoldingCompanyName, r.TechnologyTypeId, r.TechnologyTypeName, r.StateFipsId}
into g
select new
{
StateAbbreviation = g.Key.StateAbbreviation,
StateFipsId = g.Key.StateFipsId,
ProviderName = g.Key.ProviderName,
FccLicenseId = g.Key.FccLicenseId,
HoldingCompanyId = g.Key.HoldingCompanyId,
HoldingCompanyName = g.Key.HoldingCompanyName,
TechnologyTypeName = g.Key.TechnologyTypeName,
TechnologyTypeId = g.Key.TechnologyTypeId,
PopulationPassed = g.Sum(x => (int)x.PopulationPassed),
HousingUnitsPassed = g.Sum(x => (int)x.HousingUnitsPassed),
MappingDocuments = g.SelectMany(x => x.MappingDocuments).Distinct().ToArray()
};
Store(x => x.PopulationPassed, FieldStorage.Yes);
Store(x => x.HousingUnitsPassed, FieldStorage.Yes);
Index(x => x.ProviderName, FieldIndexing.Analyzed);
Index(x => x.TechnologyTypeId, FieldIndexing.NotAnalyzed);
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment